基础算法——高精度减法

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

输入格式

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

输出格式

共一行,包含所求的差。

数据范围

1≤整数长度≤1e5

输入样例:

32
11

输出样例:

21

解题思路:减法的高精度和加法的高精度类似,同样将字符串中的元素存入数组中。这里就不作过多的讲解了。咱们直接看代码:

#include <iostream>
#include <stdio.h>
#include <vector>

using namespace std;

typedef long long LL;

const int N = 100010;

bool cmp(vector<int> &A, vector<int> &B) 
{
	if(A.size() != B.size())  return A.size() > B.size(); //重点, 如果A.size > B.size 成立就返回true, 否则返回false;
	else 
	{
		for(int i = A.size() - 1; i >= 0; i --)
		{
			if(A[i] != B[i])  return A[i] > B[i];
		}
	}
	return true;
}

vector<int> sub(vector<int> &A, vector<int> &B)
{
	vector<int> C;
	for(int i = 0, t = 0; i < A.size(); i ++)
	{
		t = A[i] - t;
		if(i < B.size())  t -= B[i];
		C.push_back((t + 10) % 10);
		if(t < 0)  t = 1;
		else t = 0;
	}
	while (C.size() > 1 && C.back() == 0)  C.pop_back();
	return C;
}

signed main()
{
	string a, b;
	vector<int> A, B; //容器更方便,数组也可以。
	cin >> a >> b;
	for(int i = a.size() - 1; i >= 0; i --)  A.push_back(a[i] - '0');
	for(int i = b.size() - 1; i >= 0; i --)  B.push_back(b[i] - '0');
	if(cmp(A, B)) //判断A,B谁更大
	{
		auto C = sub(A, B); //auto自动识别C类型
		for(int i = C.size() - 1; i >= 0; i --)  cout << C[i];
		cout << endl;
	}
	else
	{
		auto C = sub(B, A);
		cout << '-';
		for(int i = C.size() - 1; i >= 0; i --)  cout << C[i];
		cout << endl;
	}
}

 当然高精度还有许多其他做法,但是原理都差不多。

一定要AC喽!!! 

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值