阶乘在main中显示错误的答案.在函数中正确计算
Factorial showing wrong answer in main. Computed correctly in function
请解释以下行为的原因。正确答案是调试后的"3"。我想把它复制到"4"后面
long int fact[501]={0};
long int factorial(int n)
{
if(n==0 || n==1)
return 1;
if(fact[n]>1)
return fact[n];
if((fact[n]=n*factorial(n-1))>=1000000007)
{ cout<<"2"<<endl<<fact[n]<<endl;
fact[n]=fact[n]%1000000007;
cout<<"3"<<endl<<fact[n]<<endl;
}return fact[n];
}
int main()
{
int n;
cin>>n;
cout<<"1"<<endl;
cout<<factorial(n)<<endl;
cout<<"4"<<endl;
printf("%ldn",fact[n]);
return 0;
}
行的输出
cout<<"3"<<endl<<fact[n]<<endl;
不一定对应main
中的n
。
试试修改后的版本,看看有什么不同:
#include <stdio.h>
#include <iostream>
using namespace std;
long int fact[501]={0};
long int factorial(int n)
{
if(n==0 || n==1)
return 1;
if(fact[n]>1)
return fact[n];
if((fact[n]=n*factorial(n-1))>=1000000007)
{ cout<<"2"<<endl<<fact[n]<<endl;
fact[n]=fact[n]%1000000007;
cout<<"3"<<endl<<n<<" "<<fact[n]<<endl;
}return fact[n];
}
int main()
{
int n;
cin>>n;
cout<<"1"<<endl;
cout<<factorial(n)<<endl;
cout<<"4"<<endl;
printf("%ldn",fact[n]);
return 0;
}
使用编译器/平台,您有long int
与4个字节,因此您的值被截断
n >= 13
,我们有
fact[13] = 6227020800
不适合uint32_t
截断后,其新值变为1932053504(然后取模后为932053497
)
要修复您的实现,您必须使用uint64_t
。(https://ideone.com/gQrxyW)
相关文章:
- C++ 中 pow() 函数的输出没有给出准确的答案
- 函数从指针 c++ 中获取错误的值并返回错误的答案
- c++:运行一个函数 8 次,并将每个答案添加到数组或 JSON 中
- 阶乘函数只返回C++中输入的答案
- 给定一个整数 N>0,区间 [0, 2^N) 中有多少个整数正好有 N-1 个设置位?编写一个返回正确答案的简短函数
- 为什么在C++算术函数中加".0"会给出小数点的答案?
- 在 c++ 中将模板与类一起使用时,类成员函数的答案错误?
- 无法在 for 循环中的 pow 函数上输出答案
- 为什么我的函数返回一个整数,尽管我已经将答案指定为浮点数
- 使用幂函数的计算给出了大数字的错误答案
- 试图弄清楚如何使用递归来获得与另一个函数相同的答案
- void 函数使用相同的变量打印两个不同的答案
- ABS 函数在 C++ 中没有给出正确的答案
- 布尔函数的错误答案
- 布尔函数没有给出正确答案
- 无法计算如何从联机答案中返回c++函数的多个值
- 函数的答案不正确
- 无法从非常简单的函数中获得正确答案
- C++构造函数并使其显示默认答案
- 二项式系数函数C++错误答案 n>13