高精度加法
#include <bits/stdc++.h>
using namespace std;
char ch1[1000 + 1], ch2[1000 + 1];
int arr1[1000 + 1], arr2[1000 + 1], sum[1000 + 1];
int main() {
cin >> ch1;
cin >> ch2;
// 如果有加数为0
if (ch1[0] == '0' && ch2[0] == '0') {
cout << '0' << endl;
} else if (ch1[0] == '0') {
cout << ch2 << endl;
} else if (ch2[0] == '0') {
cout << ch1 << endl;
} else { // 正常处理
// 计算字符串长度
int len1 = strlen(ch1);
int len2 = strlen(ch2);
// 倒序转入以便进位
for (int i = 0; i < len1; i++) {
arr1[len1 - i - 1] = int(ch1[i] - '0');
}
for (int i = 0; i < len2; i++) {
arr2[len2 - i - 1] = int(ch2[i] - '0');
}
// 打擂台找字符串最大长度
int maxLen = max(len1, len2);
// 按位相加~
for (int i = 0; i < maxLen; i++) {
sum[i] += arr1[i] + arr2[i];
// 考虑进位
if (sum[i] >= 10) {
sum[i + 1]++;
sum[i] -= 10;
}
}
if (sum[maxLen] == 0) {
maxLen--;
}
for (int i = maxLen; i >= 0; i--) {
cout << sum[i];
}
cout << endl;
}
return 0;
}
高精度减法
#include <bits/stdc++.h>
using namespace std;
char ch1[1000 + 1], ch2[1000 + 1], tmp[1000 + 1];
int arr1[1000 + 1], arr2[1000 + 1], diff[1000 + 1];
int main() {
cin >> ch1;
cin >> ch2;
// 若两个数都为零
if (ch1[0] == '0' && ch2[0] == '0') {
cout << 0 << endl;
// 若被减数为零
} else if (ch1[0] == '0') {
// 输出减数相反数(?
if (ch2[0] == '-') {
ch2[0] == ' ';
cout << ch2 << endl;
} else {
cout << "-" << ch2 << endl;
}
// 如果减数为零直接输出被减数
} else if (ch2[0] == '0') {
cout << ch1 << endl;
} else {
// 正常处理
// 字符串长度
int len1 = strlen(ch1);
int len2 = strlen(ch2);
// 如果这两个数相等输出0
if (len1 == len2 && strcmp(ch1, ch2) == 0) {
cout << 0 << endl;
return 0;
}
// 根据两个数的大小判断是否要加"-"并交换顺序
if (len1 < len2 || len1 == len2 && strcmp(ch1, ch2) < 0) {
// 交换位置~
strcpy(tmp, ch1);
strcpy(ch1, ch2);
strcpy(ch2, tmp);
cout << "-";
// 交换长度
int lentemp = len1;
len1 = len2;
len2 = lentemp;
}
// 倒序转入数组
for (int i = 0; i < len1; i++) {
arr1[len1 - i - 1] = int(ch1[i] - '0');
}
for (int i = 0; i < len2; i++) {
arr2[len2 - i - 1] = int(ch2[i] - '0');
}
// 取得最大长度
int maxLen = max(len1, len2);
// 按位相减启动
for (int i = 0; i < maxLen; i++) {
if (arr1[i] < arr2[i]) {
arr1[i + 1]--;
arr1[i] += 10;
}
diff[i] = arr1[i] - arr2[i];
}
// 删除前导零
while(diff[maxLen] == 0) {
maxLen--;
}
// 输出差
for (int i = maxLen; i >= 0; i--) {
cout << diff[i];
}
cout << endl;
}
return 0;
}