请问高加怎样改成a,b及结果皆可为负数呢?
  • 板块灌水区
  • 楼主xjqyorg
  • 当前回复0
  • 已保存回复0
  • 发布时间2022/5/9 13:55
  • 上次更新2023/10/28 01:50:05
查看原帖
请问高加怎样改成a,b及结果皆可为负数呢?
713320
xjqyorg楼主2022/5/9 13:55

请问高加怎样改成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;
}

感谢帮助。(代码可能比较丑陋,轻喷谢谢)

2022/5/9 13:55
加载中...