法一〉#include
using namespace std;
long long factorial(int n)
{
int sum = 1;
for(int i = 1; i <= n; i++)
sum = sum * i;
return sum;
}
int main() {
int n;
cin >> n;
cout <
return 0;
}
法二〉#include
using namespace std;
long long recursion(int n){
if(n == 1)
return 1;
return recursion(n - 1) * n; //递归计算n*f(n-1)
}
int main() {
int n;
cin >> n;
long long factorial = recursion(n); //递归
cout << factorial << endl;
return 0;
}
可以尝试输出sum的值,你看到就清楚了,大于12后int类型储存不了这么大的数字会造成溢出,sum变量会变成负数,或0
溢出了,int范围-2147483648~2147483647
你乘着乘着超过范围了那答案肯定就该不对了。
你第一段代码里面的 sum 定义为 int 类型的,13的阶乘为 6,227,020,800,用 int 就溢出了(int 最大值为 2,147,483,647)
而第二段代码递归函数是用 long long 定义的,最大为 9,223,372,036,854,775,807,不会溢出
解决办法:将 sum 的类型 int 改为 long long