首页 > 其他 > 详细

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

时间:2020-04-04 17:33:35      阅读:272      评论:0      收藏:0      [点我收藏+]
 
 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

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!