小练习,大数阶乘代码
思想:
运算结果放在long long类型的数组a中(如果放在字符串中还要进行字符串和数字的转换,容易出错),数组中每个数据都是一个四位数。
阶乘顺序1*2*3*……*n(用i表示其中的一个数),每次的运算结果都存储在a中,每次运算的时候,把a中的每个数依次与i相乘。
代码:
#include <stdio.h> #include <math.h> int factorial(int n) { long long a[10000];//存储运算结果,运算过程中抱保证每个a是个四位数 a[0] = 1; int m = 0, w, c; //w存储运算结果的位数,m记录存储运算结果的数组的下标,c保存运算结果中大于四位的部分,用于进位。 for(int i = 1; i <= n; i++) //参加阶乘的数字,1*2*3*……*n { c = 0; for(int j = 0; j <= m; j++) //上一步运算结果数组中的每一个数 { a[j] = a[j] * i + c; c = a[j] / 10000; a[j] = a[j] % 10000; } if(c > 0) {m++; a[m] = c;} } w = m*4 + log10(a[m]) + 1; //结果的位数 for(int i = m; i >= 0; i--)//输出运算结果 printf("%d", a[i]); return w; } int main() { factorial(10); return 0; }