當前位置:首頁 » 編程語言 » c語言計算20的階乘

c語言計算20的階乘

發布時間: 2022-05-11 15:50:39

㈠ 1到20階乘的和用c語言表達

#include <stdio.h>

long jiecheng(int x)

{

long int i,k=1;

for(i=1;i<=x;i++)

k=k*i;

return k;

}

int main()

{

long int j,k=0;

int i;

for(i=1;i<=20;i++)

{

j=jiecheng(i);

k+=j;

}

printf("%ld ",k);

}

(1)c語言計算20的階乘擴展閱讀

使用其他方法實現求1到20階乘的和:

public class Main{

public static void main(String[] args){

int i,j;

int sum=0;

int a=1;

for(i=1;i<=20;i++){

for(j=1;j<=i;j++){

a*=j;

}

sum+=a;

}

System.out.print("sum=1!+2!+3!+...+20!="+sum);

}

}

㈡ c語言題:用遞歸法求20個階乘

#include"stdio.h"

doublejc(doublen)
{
if(n>1)
returnjc(n-1)*n;
else
return1;
}
intmain()
{
doublei;
for(i=0;i<=20;i++)
printf("%.0lf ",jc(i));
}
再給一個完全用遞歸的:
#include"stdio.h"

doublejc(doublem,doublen)
{
if(m>1)
{
if(n>1)
{
if(m==n)
printf("%.0lf ",jc(m,n-1)*n);
else
returnjc(m,n-1)*n;
}
else
{
if(m>0)
jc(m-1,m-1);
return1;
}
}
else
{
printf("1 ");
}
}
intmain()
{
doubles[20],m;
m=20;
jc(m,m);
}

㈢ 這個c語言程序我想求20的階乘輸出的是21

#include <stdio.h>

double f(double n) //一個遞歸
{
if(n==0 || n==1) return 1;
else
return n*f(n-1);
}

int main()
{
double s, n=20 ;
s=f(n);

printf("s=%f\n",s);
return 0;
}
你可以運行一下 ,結果和網路計算的是一樣的。

20的階乘如果用int存儲的話會溢出的,所以我用double存儲。其實用一個int數組存儲應該更好。
滿意請採納。

㈣ C語言1到20的階乘

#include<stdio.h>
intmain()
{
inti=20,j,z=20,h=1,sum=0;
for(j=0;j<20;j++)
{
while(i>0)
{

h=i*h;
i--;
}
sum=sum+h;
z--;
i=z;
}
printf("1到20的階乘和為: ",sum");
return0;
}

㈤ 利用C語言求階乘 例如求20! 用循環和函數兩種方法……

對於階乘,你需要考慮到輸入的數的大小,進行判斷n<0,無階乘;n==0||n==1階乘為1;
n>1的就用戶循環,或者調用函數來做
1.循環
#include<stdio.h>
void main()
{
float sum=1;
int n,i;
printf("please enter an integer number:");
scanf("%d",&n);
printf("\n");
if (n<0)
printf("n<0,data error!\n");
else if(n>1)
{
for(i=2;i<=n;i++)
sum=sum*i;
printf("%d!=%10.0f\n",n,sum);
}
else
if(n==0||n==1)
{
sum=1;
printf("%d!=%10.0f\n",n,sum);
}
}
2.函數
#include <stdio.h>
void main()
{
float fac(int n);
int n;
float y;
printf("input an integer number:");
scanf("%d",&n);
y=fac(n);
printf("%d!=%10.0f\n",n,y);
}

float fac(int n)
{
float f;
if(n<0)
{
printf("n<0,data error");
}
else
if(n==0||n==1)
f=1;
else
f=fac(n-1)*n;
return (f);
}

㈥ C語言:編寫程序,求20的階乘.

給你個通用的。運行後輸入20

記得多加點分

#define M 20000 /* 最大結果位數,DOS能訪問的內存有限,最好不要超過 30000 位*/
#define N (M+5)
main()
{
int Num;
register int i,j,k,flag;
register unsigned int n,m,pc;
unsigned char str_n[5],result_0[N],result_1[N];
void fun_print_result(char *result,int flag);
int fun_mul(char *a,char *b,char *c,int flag);

printf("輸入計算其階乘的數:Num = ");
scanf("%d",&Num);

if(Num >= 100)
{
printf("\n正在進行階乘運算. . .\n");
printf("已完成 00000 的階乘,請等待. . .");
}

for (j=0;j<N;j++)
{
result_1[j] = 0; result_0[j] = 0;
}
result_1[N-1] = 1;
for(i=0;i<5;i++)
{
str_n[i] = 0;
}

n = 1;
pc = 0; flag = N-1;
while (n <= Num)
{
m = n;
k = 4;
while(m > 0)
{
str_n[k] = m%10; m /= 10; k--;
}
if (pc%2 == 0)
{
if(fun_mul (str_n,result_1,result_0,flag) != 1)
{
printf("\n\n結果溢出!當前所設置的最大結果為 %d 位 已完成 %d 的階乘",M,pc);
exit(0);
}
}
else
{
if(fun_mul (str_n,result_0,result_1,flag) != 1)
{
printf("\n\n結果溢出!當前所設置的最大結果為 %d 位 已完成 %d 的階乘",M,pc);
exit(0);
}
}

flag = flag-(4-k); /* flag 標記相乘後「可能的」第一個有效數字的標號 */

if(pc%2 == 0) /* 再處理一次使 flag 正好標記第一個有效數字的標號 */
{
if(result_0[flag] == 0) flag++;
}
else
{
if(result_1[flag] == 0) flag++;
}
n++; pc++;
if((pc)%25 == 0 && Num >= 100 && pc >= 100)
{
printf("\r已完成 %5d",pc);
}
}
if(Num >= 100) printf("\n");
if ((pc-1)%2 == 0)
{
fun_print_result (result_0,flag);
}
else
{
fun_print_result (result_1,flag);
}
}

int fun_mul(char *a,char *b,char *c,int flag) /* 相乘函數 */
{
register int i,j;
for(j=flag;j<N;j++) c[j]=0;
for(i=4;i>=0;i--)
{
if(a)
{
for (j=N-1;j>=flag;j--)
{
if(b[j])
{
c[i+j-4] += a[i]*b[j];
}
if(c[i+j-4] > 9)
{
c[i+j-5] += c[i+j-4]/10; c[i+j-4] %= 10;
}
}
}
}
if(flag < 10)
{
if (c[0] || c[1] || c[2] || c[3] || c[4]) /*** 結果溢出判斷 ***/
{
return 0;
}
}
return 1;
}

void fun_print_result(char *result,int flag) /* 輸出結果函數 */
{
int p;
printf("\n本次計算結果共有 %d 位,如下:\n\n",N-flag);
for(p=flag;p<N-1;p++)
{
printf("%d",result[p]);
if((p+1-flag)%(21*80) == 0)
{
printf("\n計算結果太長,請按任一鍵看下一屏,Esc 退出");
if(getch() == 27)
{
clrscr(); exit(0);
}
clrscr();
}
}
printf("%d",result[N-1]);
printf("\n\n[OK]");
}

㈦ C語言計算20!要求保留所有數字

20!的階乘值超過了int 32bit的數值范圍,但是在long long 64bit的范圍內。

#include<stdio.h>

intmain(){
longlonga=1;
for(inti=2;i<=20;++i){
a*=i;
}
printf("%lld ",a);
return0;
}

如果在大一些,long long也不行了,需要用大整數乘法,這樣你就需要考慮用別人實現的大整數乘法庫什麼的了。Java有BigInteger的支持,專門處理這種問題

㈧ 用C語言求20的階乘,為什麼會有溢出啊

因為階乘50太大了,變數存不下,所以最後顯示0,如果你將階乘數改小一點就沒問題了,比如10
或者將int型改成long
long型,然後結果已%lld輸出,但40、50的階乘也無法容納,因為結果太大了,20、30還可以

㈨ 1到20的階乘 C語言

用遞歸就行了,問題是階乘1到20已經溢出了unsigned
long
int的最大數值,1到16就已經溢出了,何況你的還是有符號的,比無符號的少差不多一半.
這個用遞歸實現的.
#include<stdio.h>
void
main()
{
int
fac(int
x);
unsigned
long
int
y;
int
x;
printf("請輸入一個整數:");
scanf("%d",&x);
y=fac(x);
printf("%ld\n",y);
}
int
fac(int
x)
{
unsigned
long
int
y;
if(x==1)
{
y=1;
}
else
y=fac(x-1)*x;
return
y;
}

㈩ C語言,計算20的階乘,結果要用什麼數據類型

使用 unsigned long long類型絕對的夠了,下圖是最後的運算結果:

unsigned long long類型是C語言裡面目前精度最高的數據類型,

double或者longdouble雖然也佔有8個位元組,但是他們的實際精度只有53位,

而 unsigned long long卻有64位的精度,

具體的話,可以看我的帖子:

① C語言視頻 VS2015:[7]基本數據類型:

http://jingyan..com/article/ceb9fb10c1abac8cad2ba0ca.html

② C語言視頻 VS2015:[10]printf:

http://jingyan..com/article/8ebacdf021253d49f65cd539.html

希望對你有用,我是ndk吧吧主,有問題可以ndk吧留言,謝謝!

熱點內容
web本地存儲 發布:2025-05-11 00:13:33 瀏覽:358
為什麼暗格里的密碼搜不到了 發布:2025-05-11 00:13:31 瀏覽:940
oracle存儲過程使用變數 發布:2025-05-11 00:10:07 瀏覽:739
用安卓下載蘋果的軟體叫什麼 發布:2025-05-11 00:08:22 瀏覽:113
斷牙腳本 發布:2025-05-11 00:04:21 瀏覽:68
sim卡的密碼怎麼設置密碼 發布:2025-05-10 23:41:09 瀏覽:716
自定義緩存註解 發布:2025-05-10 23:40:06 瀏覽:118
sqltext類型長度 發布:2025-05-10 23:30:21 瀏覽:979
圖形AI演算法 發布:2025-05-10 23:30:19 瀏覽:183
java上傳的文件在哪裡 發布:2025-05-10 23:30:06 瀏覽:160