您的位置:首页 > 其它

UVa 465 - Overflow 解题报告

2014-01-30 10:18 441 查看
高精度运算和比较,常规做法就是用高精度的方法进行加法和乘法,但是比较麻烦,如果用刘汝佳的bign类也是比较简单。在网上看到别人想到的用atof转化为浮点数直接比较,秒杀这道题。也是抓住这道题测试数据没有超过double的范围的漏洞吧。

以下是用atof的做法

#include <cstdio>
#include <cstdlib>
#include <climits>

char num1[300],num2[300];
int main()
{
char  c;
while (scanf("%s %c %s", num1, &c, num2) != EOF)
{
printf("%s %c %s\n", num1, c, num2);
double a = atof(num1);
double b = atof(num2);
if (a > INT_MAX)                 printf("first number too big\n");
if (b > INT_MAX)                 printf("second number too big\n");
if (c == '+' && a+b > INT_MAX)    printf("result too big\n");
if (c == '*' && a*b > INT_MAX)     printf("result too big\n");
}
}




ps.

float的范围为-2^128 ~ +2^127,也即-3.40E+38 ~ +3.40E+38;
double的范围为-2^1024 ~ +2^1023,也即-1.79E+308 ~ +1.79E+308。
int最大值为INT_MAX(定义在<climits>),为2147483647,即0x7fffffff.
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: