1 条题解

  • 0
    @ 2026-1-28 14:24:51
    #include<bits/stdc++.h>
    using namespace std;
    // [1] a:存储被减数的每一位(低位在前),b:存储减数的每一位(低位在前),c:存储差的每一位(低位在前)
    int a[10000]={},b[10000]={},c[1000]={}; 
    
    int main(){
        string s1, s2;  // [2] s1、s2:输入的两个高精度大整数字符串
        cin >> s1 >> s2;
    
        // [3] 比较两个大整数的大小,若减数s2更大,则交换被减数与减数,并输出负号
        if(s2.size()>s1.size() || (s2.size()==s1.size() && s2>s1)){
            swap(s1,s2);
            cout<<"-"; 
        }
    
        int la=s1.size(),lb=s2.size(); // [4] la:被减数的位数,lb:减数的位数
    
        // [5] 将被减数s1逆序存入数组a(低位在前,便于从低位开始计算)
        for(int i=0; i < la; i++)		a[la-i-1] = s1[i] - '0';
        // [6] 将减数s2逆序存入数组b(低位在前,便于从低位开始计算)
        for(int i=0; i < lb; i++)		b[lb-i-1] = s2[i] - '0';
    
        // [7] 逐位相减,处理借位:从低位到高位计算每一位的差
        for(int i=0;i<la;i++){
            // 若当前位被减数小于减数,向高位借1(当前位加10,高位减1)
            if(a[i]<b[i]){
                a[i]+=10;
                a[i+1]--; 	
            }
            c[i]=a[i]-b[i]; // 计算当前位的差,存入结果数组c
        }
    
        // [8] 去除结果的前导零(逆序的高位零,即数组末尾的零)
        while(la>1 && c[la-1]==0) la--;
    
        // [9] 逆序输出结果数组c(从高位到低位输出,得到正常顺序的差)
        for(int i=la-1;i>=0;i--)	cout<<c[i];
    
        return 0;
    }
    
    • 1

    信息

    ID
    1244
    时间
    1000ms
    内存
    256MiB
    难度
    1
    标签
    递交数
    1
    已通过
    1
    上传者