求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;
}

猜你喜欢

转载自www.cnblogs.com/TyranRex/p/12162381.html