计算大数阶乘c语言,C语言大数阶乘运算

C语言大数阶乘运算

答案:4  信息版本:手机版

解决时间 2019-10-06 23:22

已解决

2019-10-06 05:26

求一份计算大数阶乘的代码 从1!一直算到40!不需要相加 输出的时候 是1! = %d\n 2! = %d\n …… 40! = %d\n 每一位数用一个数组元素存储 跪求代码 鼓捣一天没鼓捣出来 请用C代码 求大神指教

最佳答案

2019-10-06 06:28

刚才刚弄过一个,int数组每个元素保存四位数,10000以内的阶乘不会有问题

#include

#define N 10000

int main()

{

static long int r[N]={1};

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!=304888344611713860501504000000

29!=8841761993739701954543616000000

30!=265252859812191058636308480000000

31!=8222838654177922817725562880000000

32!=263130836933693530167218012160000000

33!=8683317618811886495518194401280000000

34!=295232799039604140847618609643520000000

35!=10333147966386144929666651337523200000000

36!=371993326789901217467999448150835200000000

37!=13763753091226345046315979581580902400000000

38!=523022617466601111760007224100074291200000000

39!=20397882081197443358640281739902897356800000000

40!=815915283247897734345611269596115894272000000000

请按任意键继续. . .

全部回答

1楼

2019-10-06 10:38

我暂时保留我的看法!

2楼

2019-10-06 08:58

#include

int main()

{

double a[40],s=1;

int i;

for(i=0;i<40;i++)

a[i]=i+1;//存放1到40

for(i=0;i<40;i++)

{ s=s*a[i];

printf("%d!=%.0f ",i+1,s); //i是下标,但数组中咱们放的时候是下标为i的元素存的是i+1

}

return 0;

}

3楼

2019-10-06 07:45

c语言利用数组计算超大整数的阶乘代码

#include

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

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;

}

我要举报

如果感觉以上信息为低俗/不良/侵权的信息,可以点下面链接进行举报,我们会做出相应处理,感谢你的支持!

大家都在看

推荐资讯

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值