0
点赞
收藏
分享

微信扫一扫

NOI刷题网站

生活记录馆 2022-02-22 阅读 43
c++

11:大整数减法

总时间限制: 

1000ms

 

内存限制: 

65536kB

描述

求两个大的正整数相减的差。

输入

共2行,第1行是被减数a,第2行是减数b(a > b)。每个大整数不超过200位,不会有多余的前导零。

输出

一行,即所求的差。

样例输入

9999999999999999999999999999999999999

9999999999999

样例输出

9999999999999999999999990000000000000

分析及代码[作者:靳海]:

#include<iostream>

using namespace std;

const int L = 11000;

string sub(string a, string b)

{

    string ans;

    int na[L] = {0}, nb[L] = {0};

    int la = a.size(), lb = b.size();

    for(int i = 0; i < la; i++)

        na[la-1-i] = a[i] - '0';

    for(int i = 0; i < lb; i++)

        nb[lb-1-i] = b[i] - '0';

    int lmax = la > lb ? la : lb;

    for(int i = 0; i < lmax; i++)

    {

        na[i] -= nb[i];

        if(na[i] < 0)

            na[i] += 10, na[i+1]--;

    }

    while(!na[--lmax]&&lmax>0);

    lmax++;

    for(int i = lmax - 1; i >= 0; i--)

        ans += na[i] + '0';

    return ans;

}

int main(){

    string a, b;

    while(cin >> a >> b)

    {

        if(a.length() < b.length())

            cout << "-" << sub(b, a) << endl;

        else if(a.length() == b.length())

        {

            if(a < b)

                cout << "-" << sub(b, a) << endl;

            else

                cout << sub(a, b) << endl;

        }

        else

            cout << sub(a, b) << endl;

    }

    return 0;

}

举报

相关推荐

0 条评论