求n项阶乘之和并求出和的后六位
#include <iostream>
using namespace std;
// 阶乘之和--每次求和时都调用一次阶乘函数
int factorial(int n)
{
if (n < 0)
printf("值为负数,不能计算!!!\n");
else if (n == 1)
return 1;
else
return n * factorial(n - 1);
}
// 求阶乘的和
void fac_sum(int n)
{
int sum = 0;
if (n >= 30)
n = 30; // 程序做健壮性处理:数的阶乘结果呈指数增长,所以数太大一是会产生溢出,二是因为大数的增长基本上不会影响尾数的变化
for (int i = 1; i <= n; i++)
sum += factorial(i);
printf("前 %d 项和是 %d\n", n,sum);
if (sum / 10 == 0) // 个位
printf("和 %d 的后六位为 00000%d\n", sum, sum);
else if (sum / 100 == 0) // 十位
printf("和 %d 的后六位为 0000%d\n", sum, sum);
else if (sum / 1000 == 0) // 百位
printf("和 %d 的后六位为 000%d\n", sum, sum);
else if (sum / 10000 == 0) // 千位
printf("和 %d 的后六位为 00%d\n", sum, sum);
else if (sum / 100000 == 0) // 万位
printf("和 %d 的后六位为 0%d\n", sum, sum);
else if (sum / 1000000 == 0) // 十万位
printf("和 %d 的后六位为 %d\n", sum, sum);
else
printf("和 %d 的后六位为 %d\n", sum, sum % 1000000);
}
int main()
{
int n;
while (true) {
cin >> n;
fac_sum(n);
cout << endl;
}
return 1;
}