首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

【C++基础算法】高精度减法

2、高精度减法

定义:以字符串的形式接收高精度数,将其转换为数字后逆序存储在数组中,从低位到高位模拟高精度减法运算。

题目: 高精度减法

题目描述

高精度减法,求 a−b 。a,b 都是不超过 240 位的非负整数。假设有前导零

输入

两个非负整数,每行一个。

输出

一个整数,代表两个整数相减之后的结果。

样例输入

33333333333333333333333333333333333333333

22222222222222222222222222222222222222222

样例输出

11111111111111111111111111111111111111111

标程1

#include<bits/stdc++.h>

usingnamespacestd;

constint N = 505;

string s1,s2;

int a[N],b[N],c[N];

//删除前导0

string del_0(string s){

//统计前导0的个数

int len = s.size();

int t = 0; // 统计前导0的个数

while(s[t] == '0' && t < len-1)t++;

//删除

s.erase(0,t);

return s;

}

//主程序

int main(){

cin >> s1 >> s2;

//删除前导0

s1 = del_0(s1);

s2 = del_0(s2);

int la = s1.size();

int lb = s2.size();

//处理正负

if(la < lb || la == lb && s1 < s2){

swap(la,lb);

swap(s1,s2);

cout << "-";

}

//逆向存储

for(int i = 1; i <= la; i++) a[i] = s1[la-i] - '0';

for(int i = 1; i <= lb; i++) b[i] = s2[lb-i] - '0';

//相减

for(int i = 1; i <= la; i++){

c[i] = a[i] - b[i];

if(c[i] < 0){

 a[i+1] -= 1;

 c[i] += 10;

}

}

//删除前导0

while(c[la] == 0 && la > 1) la--;

//逆向输出

for(int i = la; i >= 1; i--) cout << c[i];

  return0;

}

  • 发表于:
  • 原文链接https://page.om.qq.com/page/OOH57tOxjRQrcksTwIOlSISg0
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券