当前位置:首页 » 编程语言 » 大数阶乘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-05-05 03:10:49 浏览:880
游戏脚本编程书籍推荐 发布:2024-05-05 02:59:13 浏览:72
编译器书籍推荐 发布:2024-05-05 02:57:02 浏览:56
电池存储温度 发布:2024-05-05 02:53:07 浏览:207
安卓在美国怎么下载 发布:2024-05-05 02:31:06 浏览:925
黑莓存储空间 发布:2024-05-05 02:19:50 浏览:275
我的世界矿石岛服务器宣传片 发布:2024-05-05 02:17:19 浏览:614
如何区分安卓原装充电器 发布:2024-05-05 01:41:23 浏览:72
怎么从苹果转移到安卓 发布:2024-05-05 01:41:20 浏览:721
支付宝付款码怎么设置密码 发布:2024-05-05 01:27:36 浏览:878