當前位置:首頁 » 編程語言 » c語言求x20的階乘
擴展閱讀
webinf下怎麼引入js 2023-08-31 21:54:13
堡壘機怎麼打開web 2023-08-31 21:54:11

c語言求x20的階乘

發布時間: 2023-03-25 18:03:12

『壹』 用c語言求20的階乘,為什麼會有溢出啊

一般的電腦long為32bit,而integer是閉晌16或32bit,short int 是16bit
至於怎麼運算:如果是無符蔽喊號的話,就宏態野是long := 2^32-1就這么算,希望能夠幫到你。

『貳』 利用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的階乘,結果要用什麼數據類型

使用 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吧留言,謝謝!

『肆』 c語言求20階乘我這個應該怎麼寫我的答案是-208632492

你求的不是20階乘,20階乘應做如御純岩橡鄭該這么寫
long m = 1;
for (int i = 1; i <= 20; ++i)
{
m = m * i;

}

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

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

『陸』 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語言編程,求從1的階乘一直加到20的階乘。

1、首先打開C語言編輯器,新建一個c語言的文件,導入頭文件並設置一個主函數:

『捌』 用C語言 從一的階乘加到二十的階乘

1、找到文件,新建,項目,點擊項目新建一個文件。

『玖』 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]");
}

『拾』 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;
}