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

大數階乘c語言

發布時間: 2022-06-27 21:13:54

1. c語言大數階乘運算

剛才剛弄過一個,int數組每個元素保存四位數,10000以內的階乘不會有問題
#include <stdio.h>
#define N 10000
int main()
{
static long int r[N]={1}; /*用long int 是為了保證16位編譯器也正常*/
int i,j;
int k=0,l=0;
for(i=1;i<=40;i++)
{
for(j=0;j<=l;j++)
{
r[j]=r[j]*i+k;
k=r[j]/10000;
r[j]=r[j]%10000;
}
if(k)
{
l++;
r[j]=k;
k=0;
}
j=l;
printf("%d!=%d",i,r[j--]);
for(;j>=0;j--)
{
printf("%04d",r[j]);
}
printf("\n");
}
return 0;
}

1!=1
2!=2
3!=6
4!=24
5!=120
6!=720
7!=5040
8!=40320
9!=362880
10!=3628800
11!=39916800
12!=479001600
13!=6227020800
14!=87178291200
15!=1307674368000
16!=20922789888000
17!=355687428096000
18!=6402373705728000
19!=121645100408832000
20!=2432902008176640000
21!=51090942171709440000
22!=1124000727777607680000
23!=25852016738884976640000
24!=620448401733239439360000
25!=15511210043330985984000000
26!=403291461126605635584000000
27!=10888869450418352160768000000
28!=
29!=
30!=
31!=
32!=
33!=
34!=
35!=
36!=
37!=
38!=
39!=
40!=
請按任意鍵繼續. . .

2. C語言中如何編程計算階乘

常見的有兩種:

遞歸版本:

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

還有一種是循環版:

intans=1;
for(inti=1;i<=n;i++)ans*=i;

測試方法:

#include<stdio.h>

intFac(intn){
if(n==0)return1;
returnn*Fac(n-1);
}

intmain(){
intn;
while(scanf("%d",&n)!=EOF){
intans=1;
for(inti=1;i<=n;i++)ans*=i;
printf("%d%d ",ans,Fac(n));
}
return0;
}

有個值得注意的地方:階乘時,數增大的很快,在n達到13時就會超過int的范圍,此時可以用long long或是 __int64來存儲更高精度的值,如果還想存儲更高位的,需要用數組來模擬大數相乘。

3. C語言大數階乘

我估計是acm題目,RuntimeError盡管你可以實現該
功能但是超過了他要求的時間

4. C語言怎麼求大數的階乘

C語言利用數組計算超大整數的階乘代碼

#include <stdio.h>

intmain()

{

intn;

inta[9000];//確保保存最終運算結果的數組足夠大

intdigit = 1;//位數

inttemp;//階乘的任一元素與臨時結果的某位的乘積結果

inti, j, carry;//carry:進位

printf("please in put n: ");

scanf("%d",&n);

a[0] = 1;//將結果先初始化為1

for( i=2; i<=n; i++ )//開始階乘,階乘元素從2開始依次"登場"

{//按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘

for( j=1, carry=0; j<=digit; j++ )

{

temp = a[j-1] * i + carry;//相應階乘中的一項與當前所得臨時結果的某位相乘(加上進位)

a[j-1] = temp % 10;//更新臨時結果的位上信息

carry = temp / 10;//看是否有進位

}

while(carry)

{//如果有進位

a[++digit-1] = carry % 10;//新加一位,添加信息。位數增1

carry = carry / 10;//看還能不能進位

}

}

printf("n ! = ");//顯示結果

for(j = digit; j >=1;j--)

{

printf("%d",a[j-1]);

}

printf(" ");

return0;

}




#include<stdio.h>
intmain()
{
intn;
inta[9000];//確保保存最終運算結果的數組足夠大
intdigit=1;//位數
inttemp;//階乘的任一元素與臨時結果的某位的乘積結果
inti,j,carry;//carry:進位

printf("pleaseinputn: ");
scanf("%d",&n);
a[0]=1;//將結果先初始化為1

for(i=2;i<=n;i++)//開始階乘,階乘元素從2開始依次"登場"
{//按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘
for(j=1,carry=0;j<=digit;j++)
{
temp=a[j-1]*i+carry;//相應階乘中的一項與當前所得臨時結果的某位相乘(加上進位)
a[j-1]=temp%10;//更新臨時結果的位上信息
carry=temp/10;//看是否有進位
}
while(carry)
{//如果有進位
a[++digit-1]=carry%10;//新加一位,添加信息。位數增1
carry=carry/10;//看還能不能進位
}
}
printf("n!=");//顯示結果
for(j=digit;j>=1;j--)
{
printf("%d",a[j-1]);
}
printf(" ");
return0;
}

5. 階乘如何用c語言實現

1、首先打開CodeBlocks編輯器,新建一個空白頁面,寫入頭文件和主函數:

6. C語言怎麼計算大數階乘的結果的位數

#include<cstdio>
#include<cmath>

#definepi3.14159265
#definee2.718281828

intmain()
{
intn,num;//所求為n!的位數,num為位數
scanf("%d",&n);

if(n==0)
{
num=1;
}
else
{
num=(int)((0.5*log(2*pi*n)+n*log(n)-n)/log(10))+1;
}

printf("%d",num);
}

使用斯特林公式,n!約等於sqrt(2*pi*n)*(n/e)^n,如不理解需更多信息或者有使用高精度(long long不夠)的需求繼續追問

7. 大整數階乘C語言怎麼計算

C語言利用數組計算超大整數的階乘代碼
#include <stdio.h>
int main()
{
int n;
int a[9000]; //確保保存最終運算結果的數組足夠大
int digit = 1; //位數
int temp; //階乘的任一元素與臨時結果的某位的乘積結果
int i, j, carry; //carry:進位

printf("please in put n:\n");
scanf("%d",&n);
a[0] = 1; //將結果先初始化為1

for ( i=2; i<=n; i++ ) //開始階乘,階乘元素從2開始依次"登場"
{ //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘
for( j=1, carry=0; j<=digit; j++ )
{
temp = a[j-1] * i + carry; //相應階乘中的一項與當前所得臨時結果的某位相乘(加上進位)
a[j-1] = temp % 10; //更新臨時結果的位上信息
carry = temp / 10; //看是否有進位
}
while(carry)
{ //如果有進位
a[++digit-1] = carry % 10; //新加一位,添加信息。位數增1
carry = carry / 10; //看還能不能進位
}
}
printf("n ! = "); //顯示結果
for(j = digit; j >=1;j--)
{
printf("%d",a[j-1]);
}
printf("\n");
return 0;
}

#include <stdio.h>
int main()
{
int n;
int a[9000]; //確保保存最終運算結果的數組足夠大
int digit = 1; //位數
int temp; //階乘的任一元素與臨時結果的某位的乘積結果
int i, j, carry; //carry:進位

printf("please in put n:\n");
scanf("%d",&n);
a[0] = 1; //將結果先初始化為1

for ( i=2; i<=n; i++ ) //開始階乘,階乘元素從2開始依次"登場"
{ //按最基本的乘法運算思想來考慮,將臨時結果的每位與階乘元素相乘
for( j=1, carry=0; j<=digit; j++ )
{
temp = a[j-1] * i + carry; //相應階乘中的一項與當前所得臨時結果的某位相乘(加上進位)
a[j-1] = temp % 10; //更新臨時結果的位上信息
carry = temp / 10; //看是否有進位
}
while(carry)
{ //如果有進位
a[++digit-1] = carry % 10; //新加一位,添加信息。位數增1
carry = carry / 10; //看還能不能進位
}
}
printf("n ! = "); //顯示結果
for(j = digit; j >=1;j--)
{
printf("%d",a[j-1]);
}
printf("\n");
return 0;
}

8. C語言計算大數階乘的問題

呵呵,我前段時間也在學,下面是我寫的遞歸法,請多多指教
long fac(long x)
{ if (x==1)
return 1;
else return fac(x-1)*x;
}

int main()
{ cout<<"遞歸方法求一個數的階乘!"<<endl;
long n,quit=1;
char go;
while(quit)
{ cout<<"\n請輸入一個整數:";
cin>>n;
cout<<"\n"<<n<<"的階乘為:"<<fac(n)<<endl;
cout<<"\n您要繼續運算嗎?Y or N ?";
cin>>go;
if (go=='Y'||go=='y')
quit=1;
else if (go=='N'||go=='n')
quit=0;
else {quit=0;cout<<"\n輸入錯誤!";}
}
cout<<endl<<"\n謝謝使用!回車鍵退出!";
cin.get();
cin.get();
return 0;
}

9. 求大神給個C語言大數階乘的程序,要有注釋的!

對於求大整數的階乘,可以採用分段相乘的方法,其理論基礎是加法的分配律,乘法的分配律。
for
exmaple
:123456789*123=123*(123*10^5+56789)=123*123*10^5+123*56789;
如果我們用一個數組result[0]=56789,result[1]=123,那麼123456789*123就是123*result[0]%10^6和result[1]*123+result[0]/10^6構成的一個數,另result[0]=123*result[0]%10^6,result[1]=result[1]*123+result[0]/10^6,則這個數就是result[1]result[0];
#include<stdio.h>
int
main()
{
int
n,j,i,t,p;
int
result[16000];
while(scanf("%d",&n)!=EOF){
t=p=0;result[0]=1;
//t記錄result中所存數的個數
for(j=1;j<=n;j++){
//n!=1*2*3*4...*n;
for(i=0;i<=t;i++){
result[i]=result[i]*j+p;
//如果sum>99999不成立,則不需進位,進位為0
p=result[i]/100000;
//進位
result[i]%=100000;
//數組sum中每位存5位數字
}
if(p){
//t在最高位有進位的情況下++,最高位存進位
,並讓進位為0
t++;
result[t]=p;
p=0;
}
//
如果進位不為0,
則下一次乘的時候將加上該進位,顯然不合理
}
printf("%d",result[t]);//先把最高位輸出,因為最高位沒有前導0
for(i=t-1;i>=0;i--)
printf("%05d",result[i]);//s[i]不足5位,說明需補0
也說明result[i]在對100000取余的時候去掉了前導0,所以這里要加上
printf("\n");
}
return
0;
}

10. C語言問題,求一個大數的階乘,怎麼做呢

可以用數組實現大數的階乘,挺簡單的。
希望能夠幫助到你。

熱點內容
允許更新預編譯站點 發布:2024-04-25 06:32:53 瀏覽:678
如何獲取已經連上的網路密碼 發布:2024-04-25 06:27:48 瀏覽:465
python打開界面 發布:2024-04-25 06:27:44 瀏覽:666
java數組重復 發布:2024-04-25 06:27:40 瀏覽:826
同價位的安卓和蘋果哪個好 發布:2024-04-25 06:27:38 瀏覽:358
android通訊錄源碼 發布:2024-04-25 06:04:10 瀏覽:160
白平衡演算法 發布:2024-04-25 06:04:10 瀏覽:389
手機版如何下載gmc伺服器 發布:2024-04-25 05:56:30 瀏覽:171
哈夫曼c語言編譯 發布:2024-04-25 05:43:20 瀏覽:664
贖回清演算法 發布:2024-04-25 05:33:00 瀏覽:678