首页 > 其他分享 >高精度减法

高精度减法

时间:2022-11-29 12:55:06浏览次数:84  
标签:10 return 高精度 int back vector 减法 size

高精度减法模板https://www.acwing.com/problem/content/794/

减法注意要点:

  1. 对于 t = A[i] - B[i] - t; 可以拆为 t = A[i] - t如果B[i]合法,再t -= B[i] 这么两步来做
  2. 相减后t的处理 ,把 t >= 0t < 0 用一个式子来表示 t = (t + 10) % 10 这个木有想到
  3. A B大小判断,自己写的太冗余,不如单独拎出来
#include <bits/stdc++.h>

using namespace std;

//判断是否A >= B 
bool cmp(vector<int> &A, vector<int> &B){
	if(A.size() != B.size()) return A.size() > B.size();  //如果A,B不等,A大返回true,B大返回false 
	
	for(int i = A.size() - 1; i >= 0; i--){  //如果A,B数位相等,按人类习惯就从高位开始比较 
		if(A[i] != B[i]) return A[i] > B[i]; //同上 
	}
	return true; //都一样就返回true,因为判断是A >= B; 
}

vector<int> sub(vector<int> &A, vector<int> &B){
	vector<int> C;
	for(int i = 0, t = 0; i < A.size(); i++){ //t表示借位 
		t = A[i] - t;
		if(i < B.size()) t -= B[i];  //判断B是否还有位数 
		C.push_back((t + 10) % 10);  //合二为一  (1)t >= 0,输出t. (2)t < 0, 输出t + 10 
		if(t < 0) t = 1;  //进位 
		else t = 0;
	}
	
	while(C.size() > 1 && C.back() == 0) C.pop_back();  //去除前导0 
	return C;
	
}


int main(){
	string a, b;
	cin >> a >> b;
	vector<int> 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');
	
	vector<int> C;
	
	if(cmp(A, B)) C = sub(A, B);  //如果A >= B,直接减 
	else C = sub(B, A), cout << "-";  //A < B,先输出'-',再算 -(A - B) 
	
	for(int i = C.size() - 1; i >= 0; i--) cout << C[i];
	cout << endl;
	
	return 0;
}


标签:10,return,高精度,int,back,vector,减法,size
From: https://www.cnblogs.com/csai-H/p/16935120.html

相关文章

  • 高精度乘法模板(大*大)
    高精度乘法模板(大*大)#include<bits/stdc++.h>usingnamespacestd;vector<int>mul(vector<int>&A,vector<int>&B){ vector<int>C(A.size()+B.size()+7,......
  • 高精度加法
    高精度加法模板高精度加法模板#include<bits/stdc++.h>usingnamespacestd;vector<int>add(vector<int>&A,vector<int>&B){ if(A.size()<B.size())return......
  • 高精度板子
     #include<bits/stdc++.h>usingnamespacestd;intcompare(stringstr1,stringstr2){if(str1.length()>str2.length())return1;elseif(str1.length(......
  • [AcWing 792]高精度减法
    点击查看代码#include<iostream>#include<vector>usingnamespacestd;//判断A>=B返回trueA<B返回falseboolcmp(vector<int>A,vector<int>B){//当A的......
  • C语言:大数减法
    题目输入两个正整数(20位以上),计算两个数的差 例如:  输入:5626255555855853666554212125121252222521  输出:2050430437306314144代码#include<stdio.h>#inclu......
  • 压位高精度模板
    压位高精全家桶。原代码来自于知乎上人形魔芋的压位高精模板,进行了一些修改和改进。namespaceBigInteger{typedeflonglongll;typedefunsignedlonglong......
  • 一个很好用的 C++ 高精度整数板子
    点击查看代码typedeflonglongll;typedeflongdoubleld;typedefcomplex<ld>pt;constintMOD=1e9+7;constldPI=acos(-1.L);template<classT>struc......
  • 信息学集训 | 17 高精度算法理论与实现2
    戳一戳!和我一起走进信息学的世界导读信息学能够有助于孩子未来工作发展,提升孩子的综合能力。这一节课是我们这一期课程的最后一节课,我们继续学习高精度算法,回顾如何高精度算......
  • 高精度AxB
    洛谷1303#include<iostream>usingnamespacestd;constintN=50000;intarr[2*N];intaa[N];intbb[N];intmain(){stringa,b;cin>>a>>b;for(in......
  • 高精度A+B
    A+B`考虑高精度代码#include<iostream>usingnamespacestd;constintN=510;intarr[N],aa[N],ab[N];intmain(){stringa,b;cin>>a;cin>>b;......