我正在尝试在名为“ fibonacci.txt”的文件中最多打印200个词的Fibonacci系列,但是执行后,该文件包含一些错误的总和,


  有些款项少于预期



我检查过它不是任何错误的数据类型,我已经使用unsigned long,所以应该没有任何问题。
我正在使用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


这些是一些中期术语。显然,通过计算数字位数,我们可以看到某些术语小于以前的术语。

最佳答案

您的sum变量中有一个超限。 unsigned long的最大数量为4294967295。例如,尝试使用__int64。

10-06 00:38