高精度运算和比较,常规做法就是用高精度的方法进行加法和乘法,但是比较麻烦,如果用刘汝佳的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.