题目要求:输入一个正整数n(n<=100),输出1!+2!+3!+......+n!的值。
编程实现:
# include# define N 10000 int main() { int n, d = 1, t = 1; //n:前n项;d当前项阶乘位数;t当前阶乘累加和位数 int A[N] = {1}, Sum[N] = {1}; //初始化数组A和Sum首元素为1 scanf("%d", &n); for(int i = 2; i <= n; i++){ //循环计算1~n阶乘累加和 for(int j = 0; j < d; j++){ A[j] *= i; } for(int j = 0; j < d; j++){ //数组元素都更新为一位 (满10进1) if(A[j] >= 10){ A[j+1] += A[j]/10; A[j] %= 10; if(j == d-1){ //更新数组A中元素个数(数的位数) d++; } } } for(int j = 0; j < d; j++){ //计算数组Sum的元素(有可能大于10) Sum[j] += A[j]; } for (int j = 0; j < t; j++) //数组元素都更新为一位 (满10进1) { if (Sum[j] >= 10) { Sum[j+1] += Sum[j]/10; Sum[j] %= 10; if (j == t - 1) //更新数组Sum中元素个数(数的位数) t++; } } t = t>d ? t:d; //数组Sum的位数为t和d的较大值 } for (int i = t - 1; i >= 0; i--) //输出数组Sum的元素(高位到低位) { printf("%d", Sum[i]); } return 0; }
测试结果:



