UVA465-溢出

来源:互联网 发布:网络电话机终端 编辑:程序博客网 时间:2024/04/30 23:25

#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;}