計算序列 2/1+3/2+5/3+8/5+... 的前N項之和。


 
 1 #include<stdio.h>
 2 int main()
 3 {
 4     int n;
 5     double t,fenzi=2,fenmu=1;
 6     double sum=2,term;
 7     scanf("%d",&n);
 8     while(n-1){
 9         t=fenzi;
10         fenzi +=fenmu;
11         fenmu=t;
12         term=1.0*fenzi/fenmu;
13         sum +=term;
14         n--;
15     }
16     printf("%.2lf",sum);
17 }

之前也遇到過代碼運行到較大N時,程序出錯,百思不得其解。

int占32位時,取值范圍為-2^32~2^32-1

本題中當N為44時,分子的取值將達到2971215073,超出int取值范圍(2147483647),出現異常,導致計算結果出錯,也就是PTA中判斷的較大N出錯。

N<44時一切正常,當N=44時,分子值因為超出int取值范圍出現錯誤。因此本題中,fenmu,fenzi,t應為double類型


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2026 CODEPRJ.COM