2016-07-15
UVA - 465 Overflow
题目大意:输入两个整数进行加法或乘法,判断这两个整数以及运算结果是否会大于 int 型的范围。
解题思路:输入的整数可能会很大所以用字符串读入,用三个字符串读入一行,方便输出,将 str1 与 str2 转为浮点型后判断是否大于 int 型能表示的最大值。
注意:虽然 double 也不一定能准确表示输入的数,但比起 int 已经足够。
#include <iostream>
#include <cstring>
using namespace std;
int Max = 2147483647;
char str1[100000];
char str2[100000];
char str3[100000];
double a;
double b;
int main() {
while ( cin >> str1 >> str2 >> str3 ) {
a = 0;
b = 0;
for (int i = 0; i < strlen(str1); i++)
a = a * 10.0 + str1[i] - '0';
for (int i = 0; i < strlen(str3); i++)
b = b * 10.0 + str3[i] - '0';
cout << str1 << " " << str2 << " " << str3 << endl;
if ( a > Max ) cout << "first number too big" << endl;
if ( b > Max ) cout << "second number too big" << endl;
if ( strcmp(str2,"+") == 0 )
if ( (a+b) > Max ) cout << "result too big" << endl;
if ( strcmp(str2,"*") == 0 )
if ( (a*b) > Max ) cout << "result too big" << endl;
}
return 0;
}