子序列的和 溢出问题

尽管学了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

全部评论

相关推荐

牛客963010790号:为什么还要收藏
点赞 评论 收藏
分享
10-30 23:23
已编辑
中山大学 Web前端
去B座二楼砸水泥地:这无论是个人素质还是专业素质都👇拉满了吧
点赞 评论 收藏
分享
点赞 收藏 评论
分享
牛客网
牛客企业服务