大数阶乘
时间限制:3000 ms | 内存限制:65535 KB
难度:3
- 描述
- 我们都知道如何计算一个数的阶乘,可是,如果这个数很大呢,我们该如何去计算它并输出它?
-
- 输入
- 输入一个整数m(0 输出
- 输出m的阶乘,并在输出结束之后输入一个换行符 样例输入
-
50
样例输出 -
304140932017133780436126
081660647688443776415689 60512000000000000 -
不管用int型还是用long型,数据都会溢出。用数组模拟乘法进位是种不错的思想,把整个数组当成一个数,用数组的每一位和要乘的数字相乘,并且用一个变量同步记录位数,需要进位的时候位数变化。
-
源代码贴上:
-
01.#include<stdio.h>02.intmain()03.{04.inta[20000];05.intn,count,i;06.intsum,j,too;07.scanf("%d",&i);08.a[0] = 1;09.count = 1;10.for(n=2;n<=i;n++)11.{12.for(too=0,j=0;j < count;j++)13.{14.sum = a[j] * n + too;15.a[j] = sum % 10;16.too = sum / 10;17.}18.while(too)19.{20.a[count] = too % 10;21.too = too / 10;22.count++;23.}24.}25.for(intl=count-1;l>=0;l--)26.printf("%d",a[l]);27.printf("\n");28.}
本文介绍了一种利用数组模拟乘法进位的方法来计算大数阶乘,通过不断迭代乘法和进位操作,实现对大数阶乘的有效求解。此方法避免了传统整型溢出的问题,提供了在数据量巨大时计算阶乘的解决方案。

724

被折叠的 条评论
为什么被折叠?



