题解 /【学习笔记】-- 高精度减法

· · 题解

题解 /【学习笔记】-- 高精度减法

修改日志:

#include<bits/stdc++.h>
#define mian main
#define QWQ puts("QWQ");
#define MAXN 10500 
//define是宏定义,define a b的作用是把a代替为b执行。 
//这里的意思是把MAXN替换成10500执行 
//请无视上方两个的宏定义(QWQ) 

using namespace std;

string a, b;
//选择字符串。因为字符串储存了每个串的长度,可以直接调用。
int na[MAXN], nb[MAXN], ans[MAXN]; 
bool pd;

int main()
{
    cin >> a >> b;
    if((a < b && a.size() == b.size()) || a.size() < b.size())
    {
        swap(a, b);
        pd = true;
    }
    for(int i = a.size(); i > 0; i --)na[i] = a[a.size() - i] - '0';
    for(int i = b.size(); i > 0; i --)nb[i] = b[b.size() - i] - '0';
    //将字符串中的信息转化到数组中,数组模拟数字。 
    int maxl = max(a.size(), b.size());
    //找到两个数中的最大位,为for循环服务 
    for(int i = 1; i <= maxl; i ++)
    {
        if(na[i] < nb[i])
        {
            na[i + 1] --;
            na[i] += 10;
        }
        ans[i] = na[i] - nb[i];
    }

    while(ans[maxl] == 0)maxl --;//防止减后降位,多输出若干0 

    if(pd == true)cout << "-";//b>a时,a - b < 0 所以打上负号 

    for(int i = maxl; i > 0; i --)cout << ans[i];
    if(maxl < 1)cout << "0";
    return 0;
}