高精A+B Problem
#include <iostream>
#include <cstdio>
using namespace std;
int c[100000];
int d[100000];
int e[100000];
int main() {
string a, b;
cin >> a >> b;
if (a == "0") {
cout << b;
return 0;
}
if (b == "0") {
cout << a;
return 0;
}
for (int i = a.length() - 1; i >= 0; i--) {
c[i + 1] = a[i] - '0';
}
for (int i = b.length() - 1; i >= 0; i--) {
d[i + 1] = b[i] - '0';
}
if (a.length() >= b.length()) {
for (int i = a.length() ; i > a.length() - b.length(); i--) {
if (e[i + 1] + c[i ] + d[i - a.length() + b.length() ] >= 10) {
e[i + 1] += c[i ] + d[i - a.length() + b.length() ] - 10;
e[i ]++;
} else {
e[i + 1] += c[i ] + d[i - a.length() + b.length() ];
}
}
for (int i = a.length() - b.length() ; i >= 0; i--) {
if (e[i + 1] + c[i ] >= 10) {
e[i + 1] += c[i ] - 10;
e[i ]++;
} else {
e[i + 1] += c[i ];
}
}
int num = 0;
while (e[num] == 0) {
num++;
}
for (int i = num; i <= a.length() + 1; i++) {
cout << e[i];
}
} else {
for (int i = b.length() ; i > b.length() - a.length(); i--) {
if (e[i + 1] + c[i - b.length() + a.length()] + d[i] >= 10) {
e[i + 1] += c[i - b.length() + a.length()] + d[i] - 10;
e[i ]++;
} else {
e[i + 1] += c[i - b.length() + a.length()] + d[i];
}
}
for (int i = b.length() - a.length() ; i >= 0; i--) {
if (e[i + 1] + d[i ] >= 10) {
e[i + 1] += d[i ] - 10;
e[i ]++;
} else {
e[i + 1] += d[i ];
}
}
int num = 0;
while (e[num] == 0) {
num++;
}
for (int i = num; i <= b.length() + 1; i++) {
cout << e[i];
}
}
return 0;
}
这是关于高精度加法的第一次尝试。
浙公网安备 33010602011771号