0
点赞
收藏
分享

微信扫一扫

寒假打卡Day 4 AcWing 792. 高精度减法

_鱼与渔_ 2022-01-23 阅读 33
蓝桥杯c++

题目链接 AcWing 792. 高精度减法   

题目

思路: Step1、数据存储 [从个位开始存储]

                 Step2、人工模拟减法

 #include <iostream>
#include <vector>
 
using namespace std;

 
//判断A是否大于等于B 
bool cmp(vector<int> &A,vector<int> &B) {
    if (A.size()!=B.size()) return A.size() > B.size();
    for (int i = A.size() - 1;i >= 0; i --) 
        if (A[i] != B[i])
          return A[i]>B[i];
    return true;//相等
}
//C = 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 = A[i] - t;
       if (i<B.size()) t -= B[i];
       C.push_back((t + 10) % 10);  //如果t>0 加10不变   如果t<10  则c[i] 为补位
       if (t<0) t = 1;  //借位
       else t = 0;  
    }       
    //长度大于一 且为0的数组删去    模拟输出                                                  
    while (C.size() > 1 && C.back() == 0) C.pop_back();  // C.back() 返回第0位元素  pop_back() 从0位元素开始删除  
    return C;
}   
 
int 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'); //存储数字 =字符位 -'0'
    for(int i=b.size()-1;i>=0;--i)B.push_back(b[i]-'0');

    if(cmp(A,B)) {
        auto C = sub(A,B);
    for(int i=C.size()-1;i>=0;--i)printf("%d",C[i]);  //高位先输出
    }
    else {
        auto C = sub(B,A);
        printf("-");
    for(int i=C.size()-1;i>=0;--i)printf("%d",C[i]);  //高位先输出
    }
 
    return 0;
}
举报

相关推荐

0 条评论