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類型。
