高精度减法

题目描述:

高精度减法

输入格式:

个整数a,b(第二个可能比第一个大)。

输出格式:

结果(是负数要输出负号)。

输入输出样例

输入#1                                           输出#1

2                                                    1

1

 

说明/提示

20%数据a,b在long long范围内;

100%数据0<a,b<1010086

 

题目需要注意的地方:

数据之间的大小问题

if ((num1.size() < num2.size()) || ((num1.size() == num2.size()) && (num1 < num2)))//比较大小
    {
        len = num2.size();
        swap(num1, num2);//交换两数
        flag = 0;//标记
    }

做减法时借位

c[i] += a[i] - b[i];
        if (c[i] < 0)
        {
            c[i + 1] --;
            c[i] += 10;
        }

 

 代码如下:

#include<iostream>
#include<cstdio>
#include<algorithm>
#include<cstring>
using namespace std;
int main()
{
    int flag = 1;
    string num1, num2;
    cin >> num1 >> num2;
    int a[1050] = { 0 }, b[1050] = { 0 }, c[1050] = { 0 };
    int len;
    if ((num1.size() < num2.size()) || ((num1.size() == num2.size()) && (num1 < num2)))//比较大小
    {
        len = num2.size();
        swap(num1, num2);//交换两数
        flag = 0;//标记
    }
    else len = num1.size();
    //倒序存储
    for (int i = 0;i < num1.size();i++)//将字符串转换为数字,并存储到数组中
    {
        a[i] = num1[num1.size() - i - 1] - '0';
    }
    for (int i = 0;i < num2.size();i++)
    {
        b[i] = num2[num2.size()-i-1] - '0';
    }
    
    for (int i = 0;i < len;i++)//借位
    {
        c[i] += a[i] - b[i];
        if (c[i] < 0)
        {
            c[i + 1] --;
            c[i] += 10;
        }
    }
    for (int i = len - 1;i >= 0;i--)//注意倒序输出
    {
        while (c[len-1] == 0&&i>0)//防止前面输出0
            i--;
        if (flag == 0)
        {
            cout << '-';
            flag = 1;
        }    
        cout <<c[i];
    }


}

 

posted @ 2022-04-02 14:43  嗨嗨害  阅读(103)  评论(0)    收藏  举报