计算序列 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-2025 CODEPRJ.COM