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