1 条题解
-
0
#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
- 上传者