请帮我改正以下代码#include<bits/stdc++.h> using namespace std; int a1[110] , b1[110]; int c[120]; int f = 0; int cmp(string a,string b) { if (a.size() > b.size()){ return 1; } else if(a.size() < b.size()){ return 0; } else{ for(int i =0 ;i<a.size();i++) { if (a[i] == b[i]){ continue; } else { return (a[i]>b[i]); } } } return 3; } int main(){ string a,b; cin >> a >> b; if(cmp(a,b) == 0) { string c; c = a; a = b; b = c; cout << "-"; } if(cmp(a,b) == 3) { cout << 0; return 0; } int la = a.size() ,lb = b.size(); for (int i = 0; i < la ;i++){ a1[la - i ] = a[i]-'0'; } for (int i = 0; i < lb ;i++){ b1[lb - i ] = b[i]-'0'; } for(int i=1 ;i <=la ; i++) { int t = a1[i] - b1[i]; c[i] += (t+10)%10; if ( t < 0) c[i +1] -= 1; } for(int i = la; i >=1;i -- ) { if(f == 0 && c[i]!=0){ f = 1; } if(f!=0 ) cout << c[i]; } return 0; }
时间: 2023-12-04 20:04:42 浏览: 64
c++万能头文件(包含所有其他头文件)#include<bits/stdc++.h> 注:此cpp文件包含万能头文件以及基本框架
5星 · 资源好评率100%
以下是改正后的代码:
```
#include <iostream>
#include <string>
#include <algorithm>
using namespace std;
int a1[110], b1[110], c[120];
int f = 0;
bool cmp(string a, string b) {
if (a.size() != b.size()) {
return a.size() > b.size();
}
return a > b;
}
int main() {
string a, b;
cin >> a >> b;
if (cmp(a, b)) {
swap(a, b);
cout << '-';
}
if (a == b) {
cout << 0;
return 0;
}
int la = a.size(), lb = b.size();
for (int i = 1; i <= la; i++) {
a1[i] = a[la - i] - '0';
}
for (int i = 1; i <= lb; i++) {
b1[i] = b[lb - i] - '0';
}
for (int i = 1; i <= la; i++) {
c[i] = a1[i] - b1[i];
if (c[i] < 0) {
c[i] += 10;
a1[i + 1]--;
}
}
int k = la;
while (k > 1 && c[k] == 0) {
k--;
}
for (int i = k; i >= 1; i--) {
cout << c[i];
}
return 0;
}
```
主要的改动有:
1. 修改了 `cmp` 函数的实现,使其返回值符合要求。
2. 将 `a1` 和 `b1` 数组的下标从 0 开始改为从 1 开始,避免数组越界。
3. 将减法实现修改为先计算 `c[i] = a1[i] - b1[i]`,再处理进位和借位。这样可以避免当 `a1[i]` 和 `b1[i]` 都为 0 时出现错误的情况。
4. 修改了输出结果的实现,避免输出前导零。
阅读全文