本题要求编写程序,计算序列 1!+2!+3!+⋯ 的前N项之和。
输入格式:
输入在一行中给出一个不超过12的正整数N。
输出格式:
在一行中输出整数结果。
输入样例:
5
输出样例:
153
思路1:用两层循环,里层循环用来算阶乘,外层循环用来算阶乘的和。
注意:阶乘是比较大的,所以存放阶乘和阶乘和的变量用long long int来声明,否则答案会越界。如果用long long int还不行,就用double声明,并且用%.0f输出最终结果。
#include <stdio.h>
int main () {
int N,i,j;
long long p = 1,sum= 0; //因为阶乘比较大,声明为long long int
scanf("%d",&N);
for (i = 1; i <= N; i++) {
p = 1;
for (j = 1; j <= i; j++) {
p *= j; // 里层循环用来算阶乘
}
sum += p; // 外层循环用来算阶乘和
}
printf("%ld", sum);
return 0;
}
思路2:只用一层循环来控制迭代次数。展开说一下:初始化p=1,sum=0,用i从1到N控制迭代,每次迭代时 p*=i;sum+=p。用迭代的思想,每次迭代既算出当前要加上的阶乘,又算出了加上当前阶乘之后的阶乘和,所以用一层循环就能解决问题。
#include <stdio.h>
int main () {
int N,i;
long long p = 1,sum = 0; //因为阶乘比较大,声明为long long int
scanf("%d", &N);
for (i = 1; i <= N; i++) {
p = p*i; // 每次迭代,既算出当前要加上的阶乘
sum += p; // 也算出了加上当前阶乘之后的阶乘和
}
printf("%ld", sum);
return 0;
}