當前位置:首頁 » 編程語言 » 100階乘c語言

100階乘c語言

發布時間: 2022-09-09 17:24:35

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!(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的階乘(要求採用函數調用方式實現)

long int nx_1(unsigned int x)
{
auto int i;
auto long int temp;
temp = 1;
for(i=1;i<=x;i++)
temp *= i;
return temp;
}

例如 a=nx_1(100);那麼a 就是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();
}

Ⅳ 100的階乘用c語言怎樣表示

定義為long double仍然會溢出,因為在32位系統下long double仍然只有32位,下面即可:

#include <stdio.h>
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();
}

Ⅵ 用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 調試通過。

Ⅶ C語言做100的階乘

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

Ⅷ 100的階乘在C語言中怎麼編程(要求用while和for兩種方法)

#include<stdio.h>
intmain()
{
inta=100;
doublenum=1.0;
//while循環相乘實現階乘
while(a>0)
{num*=a;
a--;
}
printf("100!的結果:%le ",num);
//for循環相乘實現階乘
num=1;
for(a=1;a<=100;a++)
{num*=a;}
printf("100!的結果:%le ",num);
return0;
}

Ⅸ c語言編程:100的階乘有多少個零

double
類型不能用
%
運算符,只有
char
,short,int,long
類型能用
%
類型的運算符!!!
因此:
f(a%10==0)
是錯的,編譯通不過。
另外,這道題目根本不是這么算的!你演算法就有問題。100
的階乘是很大的數,double
類型即使能保存的下,
也會有挺大的誤差了。
題的演算法是:統計數字
1
~
100
中間,因子2

因子
5
出現的次數。哪個出現的次數少,設少的出現
n
次,那麼最終結果就是
n

10。
比如,先簡單點的,統計
10
的階乘,計算結果有多少個
10。
設因子
2
出現次數為
x,因子
5
出現次數為
y。開始
x=y=0。
1
~
10
中:
1,1
即不能被
2
整除(沒有因子2),也不能被
5
整除(沒有因子5);x=y=0。
2,1
能被
2
整除(有因子2),但是不能被
5
整除(沒有因子5);x=x+1
=
1,
y=0。
3,3
即不能被
2
整除(沒有因子2),也不能被
5
整除(沒有因子5);x=1,y=0。
4,4
能被
2
整除(有兩個因子2),但是不能被
5
整除(沒有因子5);x=x+2=3,
y=0。
5,x=3,y=y+1
=
1
6,x=x+1=4,y=1
7,x=4,y=1
8,x=x+3=7,y=1
9,x=7,y=1
10,x=x+1=8,y=y+1=2
最終
x=8,y=2,他們中較小的是
2,因此最終的結果中有
2
個零。
實際上
10!
=
3628800,結果確實是有
2
個零。
下面是程序:
#include
int
main(int
argc,
char
*argv[])
{
//
計算
n
的階乘
int
n=100;
//
x
統計因子
2
出現的次數,y
統計因子
5
出現的次數
int
x=0,y=0;
int
i,t;
for(i=1;
i<=n;
i++)
{
t
=
i;
while(t%2
==
0)
{
x++;
t/=2;
}
while(t%5
==
0)
{
y++;
t/=5;
}
}
printf("%d!
has
%d
zeros
at
end!\n",
n,
(x<=y
?
x
:
y));
return
0;
}

Ⅹ 用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);

}

熱點內容
監控器壓縮 發布:2025-01-12 22:51:29 瀏覽:247
android加密工具 發布:2025-01-12 22:51:19 瀏覽:895
伺服器ip是東方有線 發布:2025-01-12 22:32:07 瀏覽:842
數據源碼補碼 發布:2025-01-12 22:29:41 瀏覽:867
魅族賬號密碼忘記怎麼辦啊 發布:2025-01-12 22:05:12 瀏覽:510
ps工作需要什麼配置電腦 發布:2025-01-12 21:52:22 瀏覽:606
福州優信解壓 發布:2025-01-12 21:50:40 瀏覽:430
會員過期緩存的能看嗎不聯網 發布:2025-01-12 21:16:47 瀏覽:769
演算法工作原理 發布:2025-01-12 20:36:38 瀏覽:27
網路訪問監控軟體 發布:2025-01-12 20:26:57 瀏覽:468