大整数减法

大整数减法

本人的主要思路:不管输入情况,先用较大的减较小的数,然后<0则向高位借位;至于符号通过设置一个int类型
的状态变量a来处理,初始设为0,因为笔者是把较大的数放在前面,较小的数放在后面,如果发生了string类对象
的交换,则a+1,输出时检测a,如果a>0则先输出负号。
#include<iostream>
#include<cstring>
using namespace std;

int main()
{
    string s1,s2,s3;
    int a1[201],a2[201],a3[201];
    memset(a3,0,sizeof(a3));
    int a=0,b=0;
    cin>>s1>>s2;
    if(s1.size()<s2.size())#较长的用s1存储
    {
        a+=1;
        string temp;
        temp=s1;
        s1=s2;
        s2=temp;
    }
    else
    {
        if(s1.size()==s2.size()&&s1[s1.size()-1]<s2[s2.size()-1])
        {
            string temp;
            temp=s1;
            s1=s2;
            s2=temp;
            if(a==1){}
            else
            {
                a+=1;
            }
        }
    }
    for(int i=0;i<s1.size();i++)
    {
        a1[i]=s1[i]-'0';
    }
    for(int i=0;i<s1.size()-s2.size();i++)
    {
        s3.push_back('0');
    }
    s3+=s2;
    for(int i=0;i<s3.size();i++)
    {
        a2[i]=s3[i]-'0';
    }
    for(int i=s1.size()-1;i>=0;i--)
    {
        a3[-i+s1.size()-1]+=a1[i]-a2[i];
    }
    for(int i=0;i<s1.size()-1;i++)
    {
        if(a3[i]<0)
        {
            a3[i]+=10;
            a3[i+1]-=1;
        }
    }
    for(int i=s1.size()-1;i>=0;i--)
    {
        if(a3[i]>0&&i>b)b+=i;
    }
    if(a>0)cout<<"-";
    for(int i=b;i>=0;i--)
    {
        cout<<a3[i];
    }
}
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值