代码块 注释:输入进来的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; }