http://acm.sdibt.edu.cn:8080/judge/contest/view.action?cid=396#problem/C
这道题要注意前导零,由于32位整数的位数与值我们都能算出来,于是,通过这两个信息就可以方便而快速的确定答案
#include<stdio.h>
#include<string.h>
double max=2147483647;
double judge(char *s){
    int len=strlen(s),i=0;
    while((i<len)&&(s[i]=='0'))//去除前导零
        i++;
    if(len-i>10)//比较实际的位数
        return max+1;//返回2^31
    double sum=0;
    for(int j=i;j<len;j++)//计算并返回实际值
        sum=sum*10+(int)(s[j]-48);
    return sum;
}
int main(){
    char a1[1000],a2[1000],symbol;
    while(scanf("%s %c %s",a1,&symbol,a2)!=EOF){
        printf("%s %c %s\n",a1,symbol,a2);
        double num1=judge(a1),num2=judge(a2);
        if (num1>max)
            printf("first number too big\n");
        if (num2>max)
            printf("second number too big\n");
        if (symbol=='+')
            num1+=num2;
        else
            num1*=num2;
        if (num1>max)
            printf("result too big\n");
    }
 return 0;
}

发表评论

电子邮件地址不会被公开。

Post Navigation