2736:大整数减法

原题:http://bailian.openjudge.cn/practice/2736/

描述

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

输入

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

输出

一行,即所求的差。

样例输入

9999999999999999999999999999999999999
9999999999999

样例输出

9999999999999999999999990000000000000

解法

思路:同大整数加法相似,而且位数也更方便控制。

#include <iostream>
#include <cstring>
using namespace std;
int factora[200] = {};
int factorb[200] = {};
int dif[205] = {};
int cnt1, cnt2;
int sub()
{
    for (int i = 0; i < cnt1; i++) {
        if (factora[i] < factorb[i]) {
            factora[i + 1]--;
            factora[i] = factora[i] + 10;
        }
        dif[i] = factora[i] - factorb[i];
    }
    for (int j = cnt1-1; j >= 0; j--)
    {
        if (dif[j] != 0)
            return j;
    }
    return 0;
}
int main()
{
    memset(dif, 0, sizeof(dif));
    cnt1 = 0;
    cnt2 = 0;
    char inputa[200];
    char inputb[200];
    cin >> inputa;
    cin >> inputb;
    cnt1 = strlen(inputa);
    cnt2 = strlen(inputb);
    for (int i = 0; i < cnt1; i++)
        factora[cnt1 - 1 - i] = inputa[i] - '0';
    for (int i = 0; i < cnt2; i++)
        factorb[cnt2 - 1 - i] = inputb[i] - '0';
    int result = sub();
    for (int j = result; j >= 0; j--)
        cout << dif[j];

    return 0;
}

 

上一篇:【C++札记】snprintf()函数返回值的含义


下一篇:VLAN之间通信-三层交换机实现