1065. A+B and C (64bit) (20)
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
class longint
{
public:
enum{N=10,max_int=1000000000};
int a[N],n,flag;
longint();
void scanf_l();
void trimzero();
longint operator + (longint& l);
longint operator - (longint& l);
bool operator > (longint& l);
};
bool longint::operator > (longint& l)
{
longint lt=*this-l;
int i;
for(i=0;i<lt.n;i++)
{
if(lt.a[i]>0) return lt.flag>0;
}
return false;
}
void longint::trimzero()
{
if(n>=1&&a[n-1]<0) {a[n-1]*=-1;flag=-1;}
}
longint::longint()
{
memset(a,0,N*sizeof(int));
n=0;
flag=1;
}
void longint::scanf_l()
{
char s[100];
scanf("%s",s);
int len=strlen(s);
while(len>0)
{
len=len>=8?len-8:0;
a[n++]=atoi(s+len);
*(s+len)='\0';
}
trimzero();
}
longint longint::operator + (longint& l)
{
longint tl;
if(flag*l.flag<0)
{
tl=l;
tl.flag*=-1;
return (*this - tl);
}
else
{
int jw=0,i=0,j=0,m;
while(i<n||j<l.n)
{
m=a[i]+l.a[j]+jw;
tl.a[tl.n++]=m%max_int;
jw=m/max_int;
i++;j++;
}
if(jw>0) tl.a[tl.n++]=jw;
tl.flag=flag;
tl.trimzero();
return tl;
}
}
longint longint::operator - (longint& l)
{
longint tl;
if(flag*l.flag<0)
{
tl=l;
tl.flag*=-1;
return (*this + tl);
}
else
{
int jw=0,i=0,j=0,m;
while(i<n||j<l.n)
{
m=max_int+a[i]-l.a[j]+jw;
tl.a[tl.n++]=m%max_int;
jw=m/max_int-1;
i++;j++;
}
if(jw<0) {tl= l - *this;tl.flag=flag*-1;}
else tl.flag=flag;
tl.trimzero();
return tl;
}
}
class CA
{
public:
void run();
};
void CA::run()
{
int i,k;
scanf("%d",&k);
for(i=1;i<=k;i++)
{
printf("Case #%d: ",i);
longint a,b,c;
a.scanf_l();
b.scanf_l();
c.scanf_l();
if(a+b>c)
{
printf("true");
}
else
{
printf("false");
}
printf("\n");
}
}
int main()
{
// freopen("test.in","r",stdin);
CA *a=new CA;
a->run();
return 0;
}