思考
1.阶乘就是所有小于该数的正整数的积
2.需要两个数组去记录值
3.一个是阶乘的值a[75] 一个是前(n - 1)项的和b[75]
(开数组的范围是根据估算阶乘的位数来判断的)
4.过程
一、代码
#include<iostream>
using namespace std;
int main()
{
int n, c = 70, a[75]{}, b[75]{};//需要初始化 不然的话就会导致后面的去零出问题
cin >> n;
a[1] = 1;
b[1] = 1;
for (int i = 2; i <= n; i++)
{
for (int j = 1; j <= 70; j++)//i不会达到高精度 这样虽然会产生三位数
a[j] *= i; //但是后面依旧能够处理
for (int j = 1; j <= 70; j++)//完成阶乘的运算
{
if (a[j] > 9)
{
a[j + 1] += a[j] / 10;//把高于个位的十位 或者是十位和百位放到更高一位去
a[j] = a[j] % 10;//关键部分 每次绝对能处理好的一位
}//多出来的数一直会被往前加 然后这个循环也是一直执行完所有的位数
}
for (int j = 1; j <= 70; j++)//完成累加的运算
{
b[j] += a[j];
if (b[j] > 9)
{
b[j + 1] += b[j] / 10;
b[j] = b[j] % 10;
}
}
}
for (c = 70; c > 0 && a[c] == 0; c--);//找到第一个不是零的位置
while (c > 0)
{
cout << b[c];
c--;
}
return 0;
}
代码的解释在代码中 ⇡