Code Bye

大家帮忙找错 算n!从13开始就错了

#include<iostream>
#include<vector>
using namespace std;
int main()
{
int cn;
vector<int> a(1,1);
a.push_back(0);
a.push_back(0);
for (int n =1; n <= 100; n++)
{
for (int m = 0; m <= a.size() – 1; m++)
{
a[m] = a[m] * n;
if (a.back() != 0)
{
a.push_back(0);
a.push_back(0);
a.push_back(0);
}
continue;
if (a[m-1] >= 100)
{
cn = (a[m – 1] – a[m – 1] % 100) / 100;
a[m + 1] += cn;
a[m – 1] -= cn*100;
}
if (a[m – 1] >= 10)
{
cn = (a[m – 1] – a[m – 1] % 10) / 10;
a[m + 1] += cn;
a[m] -= cn*10;
}
}
}
for (int i=a.size()-1;i>=0;i–)
cout << a[i];
int in;
cin >> in;
return 0;
}
解决方案

20

阶乘可能超过了int能表示的最大值,使用long long 类型试下

10

即使是unsigned long long类型,最大也只能表示2^64-1,而21!就已经超过2^65了。
所以假如想计算20以上数的阶乘,需要本人实现大整数计算。

CodeBye 版权所有丨如未注明 , 均为原创丨本网站采用BY-NC-SA协议进行授权 , 转载请注明大家帮忙找错 算n!从13开始就错了