[小米OJ] 3. 大数相减

题目链接

思路:

利用两个string保存相减的数,其他模拟即可。

参考了别人的一个处理减的步骤,很简洁好看。

 

string substract(string str1, string str2)
{
    string str = "";
    int len = str1.length();
    int a = 0, b = 0, c = 0;
    for (int i = len - 1; i >= 0; i--)
    {
        a = str1[i] - '0';
        b = str2[i] - '0';
        str += ((a - b - c + 10) % 10) + '0';
        if (a - b - c >= 0)
            c = 0;
        else
            c = 1;
    }
    reverse(str.begin(), str.end());
    return str;
}

完整代码:

#include <bits/stdc++.h>
using namespace std;

void init1(string input, string &str1, string &str2)
{
    int index = input.find('-');
    for (int i = 0; i < input.length(); i++)
    {
        if (i < index)
            str1 += input[i];
        else if (i > index)
            str2 += input[i];
    }
}

void init2(string str1, string &str2)
{
    while (str2.length() < str1.length())
    {
        str2 = '0' + str2;
    }
}

string substract(string str1, string str2)
{
    string str = "";
    int len = str1.length();
    int a = 0, b = 0, c = 0;
    for (int i = len - 1; i >= 0; i--)
    {
        a = str1[i] - '0';
        b = str2[i] - '0';
        str += ((a - b - c + 10) % 10) + '0';
        if (a - b - c >= 0)
            c = 0;
        else
            c = 1;
    }
    reverse(str.begin(), str.end());
    return str;
}

void print(string str)
{
    while (str[0] == '0')
    {
        str.erase(str.begin());
    }
    if (str.length() == 0)
        str = "0";
    cout << str << endl;
}

int main()
{
    string input, str, str1, str2;
    while (cin >> input)
    {
        init1(input, str1, str2);
        init2(str1, str2);
        str = substract(str1, str2);
        print(str);
    }
    return 0;
}

 

posted @ 2019-01-16 22:46  Ruohua3kou  阅读(509)  评论(0编辑  收藏  举报