Overflow |
Write a program that reads an expression consisting of twonon-negative integer and an operator. Determine if either integer orthe result of the expression is too large to be represented as a``normal'' signed integer (typeinteger if you are workingPascal, type int if you are working in C).
An unspecified number of lines. Each line will contain an integer, oneof the two operators+ or *, and another integer.
For each line of input, print the input followed by 0-3 linescontaining as many of these three messages as are appropriate: ``firstnumber too big'', ``second number too big'', ``result too big''.
300 + 3 9999999999999999999999 + 11
300 + 3 9999999999999999999999 + 11 first number too big result too big
题意:输入num1 + 或 * num2
若num1大于int可表示的最大值, 那么输出"first number too big"
同理num2的话, 输出"second number too big"
最后还要判定结果是否溢出, 若溢出, 输出"result too big"
都没溢出, 那么就没输出~
AC代码:
#include<stdio.h> #include<stdlib.h> #define MAX 2147483647 int main() { char num1[600], num2[600]; char ch; double n1, n2; while(scanf("%s %c %s", num1, &ch, num2) != EOF) { printf("%s %c %s\n", num1, ch, num2); n1 = atof(num1); n2 = atof(num2); if(n1 > MAX) printf("first number too big\n"); if(n2 > MAX) printf("second number too big\n"); if(ch == '+' && n1+n2 > MAX) printf("result too big\n"); if(ch == '*' && n1*n2 > MAX) printf("result too big\n"); } return 0; }