请问高加怎样改成a,b及结果皆可为负数呢? 已有代码如下
#include<algorithm>
#include<cstring>
using namespace std;
short a[200],b[200],ans[200],len;
char ca[200],cb[200];
void add(short a[],short b[]);
void jian(short a[],short b[]);
void jiann(short a[],short b[]);
int main()
{
cin>>ca>>cb;
short lena=strlen(ca);
short lenb=strlen(cb);
len=max(lena,lenb);
if(ca[0]!='-'&&cb[0]!='-')
{
for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
add(a,b);
for(short i=len-1;i>=0;i--) cout<<ans[i];
return 0;
}
if(ca[0]=='-'&&cb[0]=='-')
{
for(int i=0;i<len-1;i++) ca[i]=ca[i+1];
for(int i=0;i<len-1;i++) cb[i]=cb[i+1];
len--;
for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
add(a,b);
cout<<"-";
for(short i=len-1;i>=0;i--) cout<<ans[i];
return 0;
}
if(ca[0]!='-'&&cb[0]=='-')
{
for(int i=0;i<len-1;i++) cb[i]=cb[i+1];
lenb--;
len=max(lena,lenb);
for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
jian(a,b);
for(short i=len-1;i>=0;i--) cout<<ans[i];
return 0;
}
if(ca[0]=='-'&&cb[0]!='-')
{
for(int i=0;i<len-1;i++) ca[i]=ca[i+1];
lena--;
len=max(lena,lenb);
for(short i=0;i<lena;i++) a[lena-i-1]=ca[i]-'0';
for(short i=0;i<lenb;i++) b[lenb-i-1]=cb[i]-'0';
jiann(a,b);
for(short i=len-1;i>=0;i--) cout<<ans[i];
return 0;
}
}
void add(short a[],short b[])
{
for(int i=0;i<len;++i)
{
ans[i]+=a[i]+b[i];
if(ans[i]>=10)
{
ans[i+1]+=ans[i]/10;
ans[i]%=10;
}
}
if(ans[len]) len++;
else while((!ans[len-1])&&len>1) len--;
return;
}
void jian(short a[],short b[])
{
for(int i=0;i<len;++i)
{
ans[i]+=a[i]-b[i];
if(ans[i]<0)
{
ans[i+1]+=ans[i+1]-1;
ans[i]+=10;
ans[i]%=10;
}
}
if(ans[len]) len++;
else while((!ans[len-1])&&len>1) len--;
return;
}
void jiann(short a[],short b[])
{
for(int i=0;i<len;++i)
{
ans[i]+=b[i]-a[i];
if(ans[i]<0)
{
ans[i+1]+=ans[i+1]-1;
ans[i]+=10;
ans[i]%=10;
}
}
if(ans[len]) len++;
else while((!ans[len-1])&&len>1) len--;
return;
}
感谢帮助。(代码可能比较丑陋,轻喷谢谢)