超大数值减法
给定两个超大整数,求它们的差是多少?
#include <bits/stdc++.h>
using namespace std;
char a[11000], b[11000]; //被减数和减数
string sub(string sa, string sb) {
if (sa == sb) return "0"; //特判:两数字相等
bool neg = 0; //标记是否为负数
if (sa.size() < sb.size() || sa.size() == sb.size() && sa < sb)
swap(sa, sb), neg = 1; //让 a 大于 b
int lena = sa.size(), lenb = sb.size();
for (int i = 0; i < lena; i++)
a[lena - 1 - i] = sa[i] - '0'; //把字符转换成数字然后翻转,使 a[0]是最低位
for (int i = 0; i < lenb; i++)
b[lenb - 1 - i] = sb[i] - '0';
int lmax = lena;
for (int i = 0; i < lmax; i++) {
a[i] -= b[i];
if (a[i] < 0) { //处理借位
a[i] += 10;
a[i + 1]--;
}
}
while (!a[--lmax] && lmax > 0); //找到首位为 0 的位置,什么都不做
lmax++;
string ans;
for (int i = lmax - 1; i >= 0; i--) //把数字转换成字符,然后翻转
ans += a[i] + '0';
if (neg) ans = "-" + ans; //检查是否为负数
return ans;
}
int main() {
string sa, sb;
scanf("%s%s",sa,sb);
printf("%s\n",sub(sa,sb));
return 0;
}