接下来,我们看看要如何计算一个高精度整数和一个高精度整数的减法操作。首先有一个高精度减法的特殊情况:如果第一个数小于第二个数,我们要怎么去计算它们两个的差呢?我们可以在结果的最前面加上一个负号,并交换这两个数,这样最终结算的结果就和我们期望的一致了。例如,我们要计算 2-5的结果,应该为 -3,那么我们首先写出一个负号,然后计算 5-2 的值并输出。比较两个高精度数大小可以先比较两个数的位数,位数不同时位数少的小,位数相同时可以从最高位开始比较,遇到某一位不同,比较小的就小,此时其实比较的也是两个数本身的字典序,字典序小的就小。这样,我们就可以把问题简化了。现在我们需要解决的是,如何计算两个高精度整数的减法结果,保证前一个数不小于后一个数。
高精度减法
输入两个长度不超过 1000 位的整数 a 和 b,输出 a−b 的差,结果可能为负数。
输入格式
两行,每行一个不超过 1000 位的整数
输出格式
输出 a-b 的差
输入样例
3333333333333333333333333333333333333333
2222222222222222222222222222222222222222
输出样例
1111111111111111111111111111111111111111
我这里不知道为什么错了大家能否帮我看看
#include <bits/stdc++.h>
using namespace std;
int main(){
string numa,numb;
int a[1001]={}, b[1001]={}, c[1001]={};
cin>>numa>>numb;
int len1 = numa.size();
int len2 = numb.size();
int len3 = max(len1, len2);
if((numa.size() < numb.size()) || (numa.size() == numb.size() && numa < numb)){
cout<<"-";
swap(numa,numb);
}
for (int i = 1; i <= len1; i++) {
a[i]=numa[len1-i]-'0';
}
for (int i = 1; i <= len2; i++) {
b[i]=numb[len2-i]-'0';
}
for (int i = 1; i <= len3; i++) {
c[i]=a[i]-b[i];
}
for (int i = 1; i <= len3; i++) {
if(c[i] < 0){
c[i + 1]--;
c[i] += 10;
}
}
while (len3 > 1 && c[len3] == 0) {
len3--;
}
for(int i=len3;i>=1;i--){
cout<<c[i];
}
return 0;
}