子序列的和 溢出问题

尽管学了C的基础,也不能忽视不理紫书的语言板块。果然还是出了问题。

题目如下:入两个正整数 n<m<,输出 ,保留5位小数。输出包含多组数据,结束标记为 n=m=0。

开始的代码如下,不过多亏了这个测试数据输入n=65536,m=655360

看到10^6自然想到了比int大点的,就long吧。

#include<stdio.h>
int g = 1;
int main()
{
	long a, b;
	int i;
	while(scanf("%ld %ld", &a, &b) != EOF){
		
		if(a == 0 && b == 0)
			break;	
		double sum = 0.0;
		for(i = a; i <= b; i++)
			sum = sum + (1.0 / (i*i));
		printf("Case %d: %.5lf\n", g++, sum);
	}
	
	return 0;
}

 输入之后,得到的是1.#INF0,一直以为除数不能为0故如果发生此种情况,会输出1.#INF0,现在发现这个代表的是无穷大,也就是告诉你,它溢出了,故有两种解决办法。

1.将1/(i*i)→1/i/i避免i与i相乘溢出

2.long→long long

个人还是倾向于long吧,时间对于目前追求精简的我还是更为重要的(hhh

全部评论

相关推荐

微风不断:兄弟,你把四旋翼都做出来了那个挺难的吧
点赞 评论 收藏
分享
躺尸修仙中:因为很多92的也去卷中小厂,反正投递简历不要钱,面试不要钱,时间冲突就推,不冲突就面试积累经验
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务