我想打印Fibonacci序列中名为“fibonacci.txt”多达200项,但执行后的文件包含了一些错误的款项文件,Fibonacci序列出了错
一些款项均低于预期
- 我检查了,它不是任何错误的数据类型,我用的无符号长,所以应该不会有任何问题。
- 我正在使用Cfree 5.0。
我附上代码和输出的问题。
int main(){
ofstream text_file;
text_file.open("fibonnacci.txt");
unsigned long sum, sum1=1, sum2=1;
text_file<<sum1<<"\t"<<sum2<<"\t";
for(int i = 1; i < 200; i++) {
sum = sum1 + sum2;
text_file<<sum<<"\n";
/*if(i%5 == 0){
text_file<<"\n";
}*/
sum2 = sum1;
sum1 = sum;
}
text_file<<"\n";
return 0;
}
输出
102334155
165580141
267914296
433494437
701408733
1134903170
1836311903
2971215073
512559680
3483774753
3996334433
3185141890
2886509027
1776683621
368225352
2144908973
2513134325
363076002
2876210327
3239286329
1820529360
764848393
2585377753
3350226146
这些都是一些术语中旬。很明显,我们可以通过计算位数来看到某些术语比以前的术语少。
您需要详细了解[整数类型](http://en.cppreference.com/w/cpp/language/types#Integer_types)并检查[他们的范围](http://en.cppreference.com/w/cpp/language/types#Range_of_values)。 –
我知道无符号长数据类型有大约40亿的高范围,所以不应该有任何问题。 –
如果你有18亿和增加29亿,结果会是什么? *超过*无符号32位整数约40亿的限制。这就是您在添加时遇到的问题,例如'1836311903'和'2971215073'并获得'512559680'。 –