很久没写代码,写个高精度练下手,没想都WA了若干次……;贴下代码……
#include <iostream>
#include <string>
using namespace std;
int a[305]={0};
int b[305]={0};
int Compare(int *a,int *b)
{
int i;
if( a[0]>b[0] ) return 1;
if( a[0]<b[0] ) return -1;
for( i=a[0] ;i>0 ;i-- )
{
if( a[i]>b[i] ) return 1;
if( a[i]<b[i] ) return -1;
}
return 0;
}
void Plus(int *a,int *b)
{
int i;
if( a[0]<b[0] ) a[0]=b[0];
for( i=1 ;i<=a[0] ;i++ ) a[i]+=b[i];
for( i=1 ;i<=a[0] ;i++ )
{
a[i+1]+=a[i]/10;
a[i]%=10;
}
if( a[a[0]+1]>0 ) a[0]++;
}
void Subtract(int *a,int *b)
{
int flag;
int i;
flag=Compare(a,b);
if( !flag )
{
a[0]=0;
return;
}
if( flag==1 )
{
for( i=1 ;i<=a[0] ;i++ )
{
if( a[i]<b[i] )
{
a[i+1]--;
a[i]+=10;
}
a[i]-=b[i];
}
while( a[0] && !a[a[0]] ) a[0]--;
return;
}
if( flag==-1 )
{
a[0]=b[0];//就是这儿,导致了1-19=-8,晕
cout<<'-';
for( i=1 ;i<=b[0] ;i++ )
{
if( b[i]<a[i] )
{
b[i+1]--;
b[i]+=10;
}
a[i]=b[i]-a[i];
}
while( a[0] && !a[a[0]] ) a[0]--;
return;
}
}
void Init(int *a)
{
int i;
string s;
cin>>s;
if( s[0]!='-' )
{
a[0]=s.length();
for( i=1 ;i<=a[0] ;i++ )
a[i]=s[a[0]-i]-'0';
}
else
{
a[304]=1;
s=s.erase(0,1);
a[0]=s.length();
for( i=1 ;i<=a[0] ;i++ )
a[i]=s[a[0]-i]-'0';
}
}
void Print(int *a)
{
int i;
if( !a[0] )
{
cout<<0<<endl;
return ;
}
for( i=a[0] ;i>0 ;i-- ) cout<<a[i];
cout<<endl;
return ;
}
int main()
{
Init(a);
Init(b);
if( !a[304] && !b[304] )
{
Subtract(a,b);
Print(a);
return 0;
}
if( !a[304] && b[304] )
{
Plus(a,b);
Print(a);
return 0;
}
if( a[304] && !b[304] )
{
Plus(a,b);
cout<<'-';
Print(a);
return 0;
}
if( a[304] && b[304] )
{
Subtract(b,a);
Print(b);
return 0;
}
return 0;
}