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

c語言跪求100階乘

發布時間: 2022-08-22 20:15:54

c語言求1到100階乘代碼

1到100?這數夠大的了...

#include<stdio.h>
void main()
{
double j=1;
for(int i=1;i<=50;i++)j*=i;
printf("1到100的階乘是%.0f\n",j);
}

下面用函數的遞歸調用做:
#include<stdio.h>

double fact(int n)/*求階乘的函數*/
{
double j;
if(n>1)j=n*fact(n-1);/*遞歸調用,當n>1時,一直會調用下去,只不過每次參數被減1*/

else
return 1;/*當n被減到1時,返回1,如是會被累積,當n初始為1時直接返回1*/

return j;/*j是當n>1時,最後要的結果*/
}

void main()
{
printf("1到n的階乘是%.0f\n",fact(5));
}

❷ 求100的階乘,用C語言中的數組怎麼來求啊

//這就得用到高精了。下面是我寫的,能輸出1~5000也階乘的,但不能指定某個數,如果想指定某個數的,就得改下程序。如果需要,請加我Q,646203846 #include<stdio.h> #include<stdlib.h> char str[5001][20000]; int len[5001]; void solvemul(char str[],int n,char ans[]) { int i,j,e,d,q; int p; for(j=0;j<len[n-1]+10;j++) ans[j]='0'; j=0; q=n; do { p=n%10; if(p!=0) { e=0; for(i=0;str[i]!='\0';i++) { d=ans[j+i]-'0'+(str[i]-'0')*p+e; e=d/10; ans[j+i]=d%10+'0'; } while(e) { d=ans[j+i]-'0'+e; e=d/10; ans[j+i]=ans[j+i]-'0'+d%10+'0'; i++; } } n=n/10; j++; } while(n!=0); ans[j+i-1]='\0'; len[q]=j+i-1; } int main() { int i,j; str[1][0]='1';str[1][1]='\0';len[1]=1; printf("1\n"); for(i=2;i<=5000;i++) { solvemul(str[i-1],i,str[i]); for(j=len[i]-1;j>=0;j--) printf("%c",str[i][j]);printf("\n"); } return 0; }

❸ C語言做100的階乘

可以分段存,比如建一個數組,把結果村到數組裡面。

❹ c語言程序100階乘的值的問題

看了你問題,我感覺都不需要看你程序了,100階乘你知道多大嗎?你定義long long 都不夠100階乘用的,說得簡單點就是你的變數已經溢出。。。。。

❺ 用C語言求100的階乘

voidmain()
{
longi,j,x,num=0;
for(i=1;i<=100;i++)
{
x=1;
for(j=1;j<=i;j++)
x*=j;
num+=x;
}
printf("%ld",num);
getch();
}

❻ C語言編程求100的階乖,末尾有多少個零

以C語言的數據類型來求100的階乘不造成數據過大溢出是不現實的,所以不能在求得100的階乘之後再數它末尾有多少個0,只能在累乘的過程中遇到一個0就幹掉,最後數總共幹掉了多少個,至於由於溢出前面丟掉了多少位的數就管不了了,代碼如下:main()
{
long
a=1;
int
i,n=0;
for(i=2;i<=100;i++)
{
a*=i;
if(a>10000)a=a%10000;
/*只要末幾位不變對乘法結果的末幾位就沒有影響,所以在此限定a不要過大*/
loop1:
if(a>10&&a%10==0){a/=10;n++;goto
loop1;}
/*為了防止十位也是0,所以返回來再判斷一次*/
}
printf("%d\n",n);
}結果是24

❼ 用C語言程序求100的階乘

#include <stdio.h>
main()
{
int i,j,sum=1;
int count=0;
for(i=1;i<=100; i++)
{ sum=1;
for(j=1;j<=i;++j)
{ sum*=j;}
count+=sum;
}

printf("%d",count);

}

❽ 用c語言編寫100!(100的階乘)

// 注釋比較多,希望你不要感到厭煩,呵呵。
// 還記得10進制的乘法么?
// 567
// * 5
// -------
// 2835
// 用編程語言表示出來就是
// 當前的int a[4] ={0, 5, 6, 7}
// 然後從最低位開始用5去乘以每一位,少於10的部分就是這
// 個位新的值超過10的部分就是進位,加入他的前一位的結果
// 那麼從最低位開始a[0]*5=35,由於沒有進位所以a[0]=5, carry
// =3,a[1]*5=30,加上進位3=33,所以a[1] =3, carry=3,以此類推最
// 高位就是a[3] =2;所以我們的到的數組就是a[4] ={2,8,3,5},結果
// 當然就是2835拉。
// 下面我們只是用更大的進制模仿這個過程,XD
#include <stdio.h>
#define SIZE 500 // SIZE 500就可以表示結果在500*6=3000位以內的大整數
#define BASE 1000000 // 目前使用進制的基數,6位的底數可以處理1000以內的階乘
// 超過1000的話會溢出,因為最大的六位數
//乘以4位數可能超過32位整數的范圍
// 當處理大一點的階乘的話就要相應減小這個值
// 所以當你求1千萬的階乘的時候記得base是10,呵呵。
unsigned int a[SIZE];

void jiechen(int n)
{
int i, j;
int carry; //進位
int max =0; //最高位,當前數即表示佔了數組的max+1項
a[0] = 1; //最低位初始化成1

for(i=1; i<=n; i++) {
carry =0; //每讓這個超大的數乘一個新的數字時,進位初始化成0
for(j=0; j<=max; j++) { // 處理每一位
a[j] = a[j]*i +carry;
carry = a[j] / BASE; //超出10000000作為高位的進位 a[j] = a[j] % BASE; //當前位是當前位乘以*i+低位的進位
}
if(carry != 0) //最高位有進位就調整當前最高位
a[++max] = carry;
}
printf("%d!=", n); //以下是列印過程
printf("%d", a[max]); //最高位我們不列印前面的0,不然看起來不爽XD
for(i=max-1; i>=0; i--) //注意:是從高位開始列印的
printf("%06d", a[i]); //列印6位,注意要包括前面的0,還有修改了BASE的話記得改這里!
printf("\n");
}

int main()
{
for(int i=1; i<100; i++) //列印100以內的階乘來驗證我們的成果
jiechen(i);
return 0;
}

❾ 用C語言編100以內的階乘

int n;
int r[600]={0};
int count(n)
{
int i;
for(i=0;i<600;i++)
r[i]*=n;
for(i=599;i>0;i--)
{
r[i-1]=r[i-1]+r[i]/10;
r[i]=r[i]%10;
}
}

int main()
{
int i;
int reach=0;
r[599]=1;
scanf("%d",&n);
for(i=1;i<=n;i++)
count(i);
for(i=0;i<600;i++)
{if(r[i]) reach=1;
if(r[i]||reach) printf("%d",r[i]);
}
getchar();
getchar();
}

這個程序輸入數,可以計算出它的階乘。TURBO C 調試通過。