您的位置:首页 > 其它

UVA465-溢出

2012-08-19 14:51 134 查看
#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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  include c null