UVA465-溢出

#include <iostream>
#include <cstdlib>
using namespace std;
int main ()
{
    char a[3000], b[3000];
    char ch;
    long long int max =  2147483647;
    while(cin>>a)
    {
        cin.get();
        cin>>ch;
        cin>>b;
        cin.get();
        cout<<a<<" "<<ch<<" "<<b<<endl;
        double c = atof(a);
        double d = atof(b);
        double result;
        if(c>max)cout<<"first number too big"<<endl;
        if(d>max)cout<<"second number too big"<<endl;
        if(ch == '+')result = c + d;
        else  result = c * d;
        if(result>max)cout<<"result too big"<<endl;
    }
    return 0;
}





方法一真狗血啊,我只用了一个#clude<cstdlib>里的stof()函数就轻松解决了,不过收获不大,还需要寻找另一种方法!!!

记住:这个题的最大值max只能设为2147483647不能设为65535.


比较赞同的方法,缺点耗时,优点,简单易懂


#include <stdio.h>
#include <string.h>
const int Int[11]={2,1,4,7,4,8,3,6,4,7};
char *s1="first number too big",*s2="second number too big",*s3="result too big";
char exp[10010]={'\0'},opr;
int a[510]={0},b[510]={0},la,lb;
bool Bignum(int *a,int la)
{
     if(la>10) return true;
     else if(la<10) return false;
     for(int i=0;i<10;i++)
        if(a[i]>Int[i]) return true;
        else if(a[i]<Int[i]) return false;
     return false;
}
int Delzero(int *a,int la)
{
    while(!a[la-1]&&la-1) la--;
    return la;
}
void Change(int *a,int la)
{
     int t;
     for(int i=0;i<la-i-i;i++)
     { t=a[i]; a[i]=a[la-1-i]; a[la-1-i]=t; }
}
void Plus(int *a,int *b,int la)
{
     for(int i=0;i<la;i++)
     {
        a[i]+=b[i];
        if(a[i]>=10)
        {
           a[i+1]++;
           a[i]%=10;
        }
     }
     if(a[la]) la++;
     la=Delzero(a,la);
     Change(a,la);
     if(Bignum(a,la)) printf("%s\n",s3);
}
void Mult(int *a,int *b,int la,int lb)
{
     int c[510]={0};
     for(int i=0;i<la;i++)
        for(int j=0;j<lb;j++)
        {
            c[i+j]+=a[i]*b[j];
            if(c[i+j]>=10)
            {
               c[i+j+1]+=c[i+j]/10;
               c[i+j]%=10;
            }
        }
     la+=lb;
     la=Delzero(c,la);
     Change(c,la);
     if(Bignum(c,la)) printf("%s\n",s3);
}
int main()
{
    bool t;
    while(gets(exp)!=NULL)
    {
       t=true;la=lb=0;
       memset(a,0,sizeof(a));
       memset(b,0,sizeof(b));
       puts(exp);
       for(int i=0;i<strlen(exp);i++)
          if(exp[i]==' '||exp[i]=='*'||exp[i]=='+')
          {
             if(exp[i]=='*'||exp[i]=='+') opr=exp[i];
             t=false;
          }
          else
          {
             if(t) a[la++]=exp[i]-'0';
             else b[lb++]=exp[i]-'0';
          }
       Change(a,la); la=Delzero(a,la); Change(a,la);
       Change(b,lb); lb=Delzero(b,lb); Change(b,lb);
       if(Bignum(a,la)) printf("%s\n",s1);
       if(Bignum(b,lb)) printf("%s\n",s2);
       Change(a,la); Change(b,lb);
       if(opr=='+') Plus(a,b,la>lb?la:lb);
       else         Mult(a,b,la,lb);
    }
    return 0;
}



你可能感兴趣的:(UVA465-溢出)