求n的阶乘,使用数组存储结果

利用基本乘法运算思想求n的阶乘,使用数组存放所得结果。利用数组存放结果,可避免大数溢出的问题。

 

#include int main() { long int n; long int a[250000]; //确保保存最终运算结果的数组足够大 long int digit = 1; //结果的位数 long int temp; //阶乘的任一元素与临时结果的某位的乘积结果 long int i,j,carry; //i:1~n的某一阶乘元素;carry:进位 printf("please in put n:/n"); scanf("%d",&n); a[0] = 1; //将结果先初始化为1 for(i = 2; i <= n; i++) { //开始阶乘,阶乘元素从2开始依次"登场" //按最基本的乘法运算思想来考虑,将阶乘元素i与临时结果的每位a[j-1]相乘 for( j = 0, carry = 0; j < digit; j++) { temp = i * a[j] + carry; //相应阶乘中的一项i与当前所得临时结果的从低到高各位a[j-1]依次相乘(加上进位) a[j] = temp % 10; //更新临时结果的位上信息 carry = temp / 10; //更新相乘后的进位 } while(carry) //如果有进位 { ++digit; //新加一位,添加信息。位数增1 a[digit-1] = carry % 10; //将进位放在新加的结果位上 carry = carry/10; //看还能不能进位 } } printf("n ! = "); //输出结果 for(j = digit; j >=1;j--) { printf("%d",a[j-1]); } printf("/n%d",digit); return 0; }

你可能感兴趣的:(C/C++,算法)