算法刷题笔记 高精度减法(C++实现)

文章目录

题目描述

  • 给定两个正整数(不含前导0),计算它们的差,计算结果可能为负数。

输入格式

  • 共两行,每行包含一个整数。

输出格式

  • 共一行,包含所求的差。

求解思路和代码

  • 基本思路:和高精度的整数加法类似,同样需要模拟减法竖式计算的过程。需要注意的是,两者相减可能得到负数,因此需要首先判定两个数字的大小,如果被减数更小,则用减数减去被减数,最后添加一个负号。需要注意的是,最后需要去除多余的前导零。
  • 解题代码:
cpp 复制代码
#include <iostream>
#include <vector>
#include <cstdio>
using namespace std;

bool bigger_or_equal(const vector<int>& a, const vector<int>& b)
{
    if(a.size() > b.size()) return true;
    else if (b.size() > a.size()) return false;
    else
    {
        for(int i(a.size() - 1); i >= 0; --i)
        {
            if(a[i] > b[i]) return true;
            else if(a[i] < b[i]) return false;
        }
        return true;
    }
}

vector<int> sub(const vector<int>& a, const vector<int>& b)
{
    int yushu(0);
    int sub1, sub2, temp;
    vector<int> result;
    int i,j;
    if(bigger_or_equal(a, b))
    {
        for(i = 0, j = 0; i < a.size();)
        {
            sub1 = a[i++];
            sub2 = (j < b.size() ? b[j++] : 0);
            temp = sub1 - sub2 - yushu;
            if(temp < 0)
            {
                temp += 10;
                yushu = 1;
            }
            else yushu = 0;
            result.push_back(temp);
        }
        while(result[result.size() - 1] == 0 && result.size() > 1) result.pop_back();
    }
    else
    {
        printf("-");
        return sub(b, a);
    }
    return result;
}

int main(void)
{
    string num1, num2;
    cin >> num1 >> num2;
    vector<int> number1, number2;
    for(int i(num1.length() - 1); i >= 0; --i) number1.push_back(num1[i] - '0');
    for(int i(num2.length() - 1); i >= 0; --i) number2.push_back(num2[i] - '0');
    vector<int> result = sub(number1, number2);
    for(int i(result.size() - 1); i >= 0; --i) printf("%d", result[i]);
    return 0;
}
  • 语法注意事项 :对于一个向量对象,可以使用pop_back方法,从向量中删除尾部的一个元素。
相关推荐
拓恒技术3 小时前
无人机巡检AI算法的工程化落地:从需求到交付的5个核心环节
人工智能·算法·无人机
晨曦中的暮雨3 小时前
限流算法——固定窗口、滑动窗口、漏桶、令牌桶
java·开发语言·算法
怕浪猫3 小时前
Claude Code vs Codex:Computer Use 实现原理深度拆解
算法·面试·github
罗西的思考5 小时前
AI 时代的 “房谋杜断”:如何培养能力、品味与判断力
人工智能·算法·机器学习
淡海水5 小时前
07-02-源码-.NET Core GC分配路径
算法·unity·c#·.netcore·gc·1024程序员节
choumin6 小时前
C++中万能引用与std::forward的作用和用法
c++·万能引用·std forward
下一站春风里7 小时前
位运算完整学习笔记:按位与(&)+ 异或(^)
开发语言·c++·算法
DRobot7 小时前
【机械制图与CAD实战(二十五)】螺纹的表示方法
算法·机械制图
用户老李7 小时前
卡尔曼滤波自学教程 10:无迹卡尔曼滤波(UKF)
算法
李某学编程8 小时前
基于ARM的微机原理学习笔记(一)
arm开发·笔记·学习