UVa OJ
Root?::?AOAPC I: Beginning Algorithm Contests (Rujia Liu)?::?Volume 1. Elementary Problem Solving?::?Big Number
|
?Overflow?
Write a program that reads an expression consisting of two non-negative integer and an operator. Determine if either integer or the result of the expression is too large to be represented as a ``normal'' signed integer (type?integer?if you are working Pascal,type?int?if you are working in C).
Input
An unspecified number of lines. Each line will contain an integer,one of the two operators?+?or?*,and another integer.
Output
For each line of input,print the input followed by 0-3 lines containing as many of these three messages as are appropriate: ``first number too big'',``second number too big'',``result too big''.
Sample Input
300 + 3
9999999999999999999999 + 11
Sample Output
300 + 3
9999999999999999999999 + 11
first number too big
result too big
把两个数字转换为浮点数,然后和MAXN_int 比较
用到一个atof()函数,可以把字符串直接转换为浮点数。头文件是stdlib.h
一开始字符数组开的太小,wa了一次。。
#include<iostream>
#include<cstdio>
#include<cstdlib>
#include<cstring>
#define MAXN 2147483647
using namespace std;
int main ()
{
double a,b;
char numa[500],numb[500],ch;
while(scanf("%s %c %s",numa,&ch,numb)!=EOF)
{
printf("%s %c %sn",ch,numb);
a=atof(numa);
b=atof(numb);
if (a>MAXN) cout<<"first number too big"<<endl;
if (b>MAXN) cout<<"second number too big"<<endl;
if (ch=='+' && a+b>MAXN) cout<<"result too big"<<endl;
if (ch=='*' && a*b>MAXN) cout<<"result too big"<<endl;
}
}