代码块
注释:输入进来的a,b和输出出去的c的顺序都是倒过来的,所以输入输出的时候都记住要倒序
ps: 5 x 2 = 01(真实=》 5 x 2 = 10)
加法:
string pluss(string a,string b) {
if (a.size() < b.size()) {
for (int i = a.size(); i < b.size(); i++) {
a = a + "0";
}
}
else {
for (int j = b.size(); j < a.size(); j++) {
b = b + "0";
}
}
int ins = 0;
for (int i = 0; i < a.size(); i++) {
int linshi = (a[i] + b[i] - '0' - '0' + ins);
a[i] = linshi % 10 + '0';
ins = linshi / 10;
}
if (ins > 0) {
a = a + (char)('0' + ins);
}
return a;
}
高精度乘法:
string muti(string a, string b) {
char ary[2000];
memset(ary, 0, sizeof ary);
int len = 0;
for (int i = 0; i < a.size(); i++) {
int ins = 0;
for (int j = 0; j < b.size(); j++) {
int linshi = (a[i] - '0') * (b[j] - '0') + ins;
ary[i + j] += linshi % 10 ;
len = max(len, i + j);
ins = linshi / 10;
}
if (ins > 0) {
ary[b.size() + i] += ins;
len = max(len, int(b.size() + i));
}
}
for (int i = 0; i <= len; i++) {
ary[i] += '0';
}
string c = ary;
return c;
}
代码块
高精度除法:(a是正的)
string div(string a, ll b) {
ll begin = a.size() - 1;
string ans = "";
ll now = 0;
FOR(i, 0, begin) {
now = now * 10 + a[i] - '0';
if (now >= b) {
ans = ans + (char)(now / b + '0');
now %= b;
}
else {
if (ans != "")
ans = ans + "0";
}
}
if (ans == "") ans = "0";
return ans;
}