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类型。
计算序列 2/1+3/2+5/3+8/5+... 的前N项之和。
原文:https://www.cnblogs.com/chenshipeople/p/12632308.html