codevs 3115 高精度练习--减法

题目大意:

给定两个数a、b , 算出a-b;(a和b的位数各不超过500位)

思路:

模拟减法:

代码:

#include <iostream>
#include <algorithm>
#include <cmath>

using namespace std;

int ans[501] = {0};

int sub(string a, string b)// a is the big number, b is smaller.
{
    int m = a.length()-1;
    int n = b.length()-1;
    int k = 0;

    for(int i = m; i >= 0; i--)
    {
        if(n >= 0)
        {
            if(a[i] >= b[n])
                ans[k++] = int(a[i]-b[n]);

            else
            {
                ans[k++] = int(a[i]+10-b[n]);

                int tmp = i-1;
                while(a[tmp] == '0')
                {
                    a[tmp] = '9';
                    tmp--;
                }
                a[tmp] = char(a[tmp]-1);
            }

            n--;
        }

        else
        {
            ans[k++] = int(a[i] - '0');
        }
    }

    return k;

}

int main()
{

    string a,b;
    cin >> a >> b;
    int k;

    if(a.length() < b.length() || (a.length() == b.length() && a < b))
    {
        k = sub(b,a)-1;
        cout << "-";
    }

    else if(a.length() > b.length() || (a.length() == b.length() && a > b))
    {
        k = sub(a,b)-1;
    }

    else
    {
        cout << "0";
    }

    while(ans[k] == 0)
        k--;
    for(int i = k; i >= 0; i--)
    {
        cout << ans[i];
    }


    return 0;
}

  

原文地址:https://www.cnblogs.com/zyqBlog/p/6219517.html