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

502 高精度减法

时间:2022-09-04 09:46:32浏览次数:87  
标签:lb la int vi 高精度 return 减法 502 size

视频链接:

Luogu P2142 高精度减法

#include <iostream>
using namespace std;

const int N = 110000;
int A[N],B[N],C[N];
int la,lb,lc;

bool cmp(int A[],int B[]){
  if(la != lb) return la>lb;
  for(int i = la; ~i; i--)
    if(A[i]!=B[i]) return A[i]>B[i];
  return true; //避免结果-0
}
void sub(int A[],int B[]){
  int t = 0;
  for(int i=0;i<=la;i++){
    t = A[i];
    t -= B[i];
    if(t<0) A[i+1]--, t+=10;
    C[i] = t % 10;
  }
  while(la&&C[la]==0) la--;//处理前导0
}
int main(){
  string a, b;
  cin >> a >> b;
  la=a.size()-1,lb=b.size()-1;
  for(int i=la; ~i; i--) A[la-i]=a[i]-'0';
  for(int i=lb; ~i; i--) B[lb-i]=b[i]-'0';
  if(!cmp(A,B)) swap(A,B),swap(la,lb),cout<<'-';
  sub(A, B);
  for(int i=la; ~i; i--) printf("%d",C[i]);
  return 0;
}
#include <iostream>
#include <vector>
using namespace std;

typedef vector<int> vi;
vi A,B,C;
bool cmp(vi &A, vi &B){
  if(A.size() != B.size()) 
    return A.size()>B.size();
  for(int i = A.size()-1; ~i; i--)
    if(A[i]!=B[i]) return A[i]>B[i];
  return true; //避免结果-0
}
void sub(vi &A, vi &B){
  int t = 0;
  for(int i = 0; i<A.size(); i ++){
    t = A[i];
    if(i<B.size()) t -= B[i];
    if(t<0) A[i+1]--, t+=10; //借位
    C.push_back(t % 10);
  }
  while(C.size()>1 && !C.back()) 
    C.pop_back(); //处理前导0
}
int main(){
  string a, b;
  cin >> a >> b;
  for(int i=a.size()-1;~i;i--) A.push_back(a[i]-'0');
  for(int i=b.size()-1;~i;i--) B.push_back(b[i]-'0');
  if(!cmp(A, B)) swap(A,B), cout << '-';
  sub(A, B);
  for(int i=C.size()-1; ~i; i--) cout << C[i];
}

 

标签:lb,la,int,vi,高精度,return,减法,502,size
From: https://www.cnblogs.com/dx123/p/16654287.html

相关文章

  • 信息学奥赛一本通 1169:大整数减法
    时间限制:1000ms      内存限制:65536KB提交数:35546   通过数:20249【题目描述】求两个大的正整数相减的差。【输入】共2行,第1行是被减数a,......
  • 信息学一本通 1307:【例1.3】高精度乘法
    时间限制:1000ms      内存限制:65536KB提交数:47439   通过数:17996【题目描述】输入两个高精度正整数M和N(M和N均小于100位)。求这两个高精度数......
  • 501 高精度加法
    视频链接:LuoguP1601A+BProblem(高精)#include<iostream>usingnamespacestd;constintN=505;intA[N],B[N],C[N];intla,lb,lc;voidadd(){lc=max(la,l......
  • leetcode1502-判断能否形成等差数列
      我的原始代码class Solution {public:    bool canMakeArithmeticProgression(vector<int>& arr) {        sort(arr.begin(),arr.end()); ......
  • 车路协同、车联网、智慧交通、智能网联车、自动驾驶、无人驾驶、高精度地图
    车路协同、车联网、智慧交通、智能网联车、自动驾驶、无人驾驶、高精度地图17年11月开始工作,从事交通行业,主要为公路、高速、公交、交通相关项目。虽然是个Java开发工程师......
  • 高精度模板
    赌一手今年CSP必考高精。加法:#include<bits/stdc++.h>usingnamespacestd;stringa,b;vector<int>add(vector<int>A,vector<int>B){if(A.size()<......
  • P5021 [NOIP2018 提高组] 赛道修建 思路简记
    发现答案具有单调性,尝试一下二分答案能不能做二分答案\(t\)后,问题的关键就变成最多能找到多少条长度大于等于\(t\)的赛道我们先假设整棵树以\(1\)为根把样例的图......
  • 计算机自底向上(二):二进制减法
    在上一篇随笔中我们实现了一个位数任意多的二进制加法器,在这里我们进一步去考虑下一种运算:减法运算。事实上我们不需要一个减法逻辑;我们需要的是一个负号,因为A-B=A+(......
  • 高精度
    高精度以下均为压位高精度高精度除高精度以二分法求以下均含divide带余数除法TODO:FFT高精度除高精度快速傅里叶加速乘法CodenamespaceFFT{usingcpx=complex<......
  • 高精度a+b
    高精度a+bacwing3596.a+b存在vector<int>中去,倒着存,低位在前,高位在后代码#include<iostream>#include<vector>#include<cstring>usingnamespacestd;vector<i......