下面是我AC了但其实是错误的代码。
#include <iostream>
#include <string>
using namespace std;
int r[20000], a[20000], b[20000];
bool compare(string s1, string s2) {//判断大小
if (s1.size() > s2.size())
return true;
else if (s1.size() < s2.size())
return false;
else
return s1 >= s2;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
int i;
bool com = compare(s1, s2);
if (com) {
a[0] = s1.size();
b[0] = s2.size();
for (i = 0; i < a[0]; i++)
a[a[0] - i] = s1[i] - '0';
for (i = 0; i < b[0]; i++)
b[b[0] - i] = s2[i] - '0';
}
else {
a[0] = s2.size();
b[0] = s1.size();
for (i = 0; i < a[0]; i++)
a[a[0] - i] = s2[i] - '0';
for (i = 0; i < b[0]; i++)
b[b[0] - i] = s1[i] - '0';
}
for (i = 0; i <= a[0]; i++)
r[i] = a[i];
for (i = 1; i <= b[0] + 1; i++) {//做减法,错误就在"i<=b[0]+1",这样10000-999的答案是正确的,但1000000000000-999的答案是错误的
if (r[i] < b[i]) {
r[i] += 10;
r[i + 1]--;
}
r[i] -= b[i];
}
if (i >= r[0]) {//高位有可能变为0
while (r[i] == 0 && i >= 1)
i--;
if (i == 0)
r[0] = 1;
else
r[0] = i;
}
if (com)
for (i = r[0]; i > 0; i--)
cout << r[i];
else {
cout << "-";
for (i = r[0]; i > 0; i--)
cout << r[i];
}
return 0;
}
下面是完全正确的(自以为)代码
#include <iostream>
#include <string>
using namespace std;
int r[20000], a[20000], b[20000];
bool compare(string s1, string s2) {
if (s1.size() > s2.size())
return true;
else if (s1.size() < s2.size())
return false;
else
return s1 >= s2;
}
int main() {
string s1, s2;
cin >> s1 >> s2;
int i;
bool com = compare(s1, s2);
if (com) {
a[0] = s1.size();
b[0] = s2.size();
for (i = 0; i < a[0]; i++)
a[a[0] - i] = s1[i] - '0';
for (i = 0; i < b[0]; i++)
b[b[0] - i] = s2[i] - '0';
}
else {
a[0] = s2.size();
b[0] = s1.size();
for (i = 0; i < a[0]; i++)
a[a[0] - i] = s2[i] - '0';
for (i = 0; i < b[0]; i++)
b[b[0] - i] = s1[i] - '0';
}
for (i = 0; i <= a[0]; i++)
r[i] = a[i];
for (i = 1; i <= r[0]; i++) {//就是改了这个地方
if (r[i] < b[i]) {
r[i] += 10;
r[i + 1]--;
}
r[i] -= b[i];
}
while (r[i] == 0 && i >= 1)
i--;
if (i == 0)
r[0] = 1;
else
r[0] = i;
if (com)
for (i = r[0]; i > 0; i--)
cout << r[i];
else {
cout << "-";
for (i = r[0]; i > 0; i--)
cout << r[i];
}
return 0;
}