5.465 - Overflow

一直想去除前导0,并且长度在[0,10]内的字符串用atoll() <#include<cstdlib>中> 转换为long long型整数.
if(len1-i>10) {pan1,a=int_+1;}  
else
{
    a=atof(str1);
    if(a>int_) {pan1;a=int_+1;}
}
但是,始终不成功.
无奈,用atof(). 希望,有人看了这篇文章的,能帮帮我.

本题判断 输入的两个数 和两个数 经过运算后的值 是否大于2147483647.

#define pan1 printf("first number too big\n")
#define pan2 printf("second number too big\n")
#define pan3 printf("result too big\n")
#define maxn 10240
#define int_ 2147483647
int main()
{
    char str1[maxn],op[4],str2[maxn];
    while(scanf("%s %s %s",str1,op,str2)==3)
    {
        printf("%s %s %s\n",str1,op,str2);
        double a,b,c;
        int len1=strlen(str1),len2=strlen(str2),i;
        for(i=0;i<len1;i++) if(str1[i]!='0') break;  ///前导0排除.
        if(len1-i>10) {pan1,a=int_+1.0;}  ///如果大于了整数型的最大值,那么就赋值为 2147483648.0,避免下面求和、求积时超过上限值
        else
        {
            a=atof(str1);  ///字符串转换为double型.
            if(a>int_) {pan1;a=int_+1.0;}  ///如果大于了整数型的最大值,那么就赋值为 2147483648.0
        }
        for(i=0;i<len2;i++) if(str2[i]!='0') break;
        if(len2-i>10) {pan2;b=int_+1.0;}
        else
        {
            b=atof(str2);
            if(b>int_) {pan2;b=int_+1.0;}
        }
        switch(op[0])
        {
            case '+':c=a+b; break;
            case '*':c=a*b; break;
        }
        if(c>int_) pan3;
    }
    return 0;
}

你可能感兴趣的:(uva,Big_number)