【C++】高精度减法

#include <iostream>
using namespace std;
int main(){
    string s1,s2;
    cin >> s1;
    cin >> s2;
    int a1[210]={0};
    int a2[210]={0};
    int a3[210]={0};
    char flag='+';
    if (s1.size()<s2.size() || s1.size()==s2.size() && s1<s2){
        swap(s1,s2);
        flag='-';
    } 
    //倒序存入
    for (int i=0;i<s1.size();i++){
        a1[i]=s1[s1.size()-i-1] - '0';
    }
    for (int i=0;i<s2.size();i++){
        a2[i]=s2[s2.size()-i-1] - '0';
    }
    //借位
    for (int i=0;i<s1.size();i++){
        if (a1[i]<a2[i]){
            a1[i]+=10;
            a1[i+1]-=1;
        }
        a3[i]=a1[i]-a2[i];  
    }
    if (flag=='-'){
        cout << flag;
    }
    //找倒序输出下标
    int index=0;
    for (int i=s1.size()-1;i>=0;i--){
        if (a3[i]!=0){
            index=i;
        }
        break;
    }
    for (int i=index;i>=0;i--){
        cout << a3[i];
    }
    return 0;
}

原理:小学二年级减法算法

洛谷:https://www.luogu.com.cn/problem/P2142

© 版权声明
THE END
点赞13 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片

    暂无评论内容