处理这个问题,我们首先会想到把这十个阶乘分开来一个一个的求,怎么求单个的阶乘呢?
代码如下(求10!):
#include <stdio.h>
int main()
{
int i = 0;
int ret = 1;
for (i = 1; i <= 10; i++) {
ret = ret * i;
}
printf("%d", ret);
return 0;
}
最后,我们再用一个循环,就可以求出这十个数阶乘的和.
#include <stdio.h>
int main()
{
int i = 0;
int n = 0;
int ret = 1;
int sum = 0;
for (n = 1; n <= 10; n++)
{
ret = 1;
for (i = 1; i <= n; i++) {
ret = ret * i;
}
sum = sum + ret;
}
printf("%d", sum);
return 0;
}
但是我们发现,ret把每一个数的阶乘都从1开始乘起,这个代码的效率不高.
所以可以优化:
优化后的代码如下:
#include <stdio.h>
int main()
{
int i = 0;
int n = 10;
int ret = 1;
int sum = 0;
for (i = 1; i <= n; i++)
{
ret = ret * i;
sum = sum + ret;
}
printf("%d", sum);
return 0;
}