做题思考,分享给有需要的人。
题干如下:
输入3个非常大的正整数(但不超过int的最大值),计算它们的平均值。
这道题下意识地会直接将3个数加在一起后处以3.0,但是这是三个非常大的正整数,直接相加会发生溢出,导致输出错误。
苦思冥想之下想出了一个应策,浮点数存储分为符号位,指数位,尾数位,指数位的存不下的部分可以用尾数来存储。
以下为代码实现:
#include <stdio.h>
int main() {
int a=0,b=0,c=0;
double sum=0,aver=0;
scanf("%d %d %d",&a,&b,&c);
sum=a/1000000.0+b/1000000.0+c/1000000.0;//将整数转化为浮点数
aver=sum/3.0*1000000;//求平均值及复原
printf("%lf",aver);
return 0;
}