// 高精度加法 a,b均为非负整数,下同
string add(string a,string b) {
string c;
int i = a.size()-1,j = b.size()-1,t = 0;
while(i>=0||j>=0||t!=0) {
if(i>=0) t += a[i–]-‘0’;
if(j>=0) t += b[j–]-‘0’;
c += t%10+‘0’;
t/=10;
}
return string(c.rbegin(),c.rend());// or reverse(c.begin(),c.end());
}
// 高精度减法
int cmp(string a,string b);
string sub(string a,string b) {
if(cmp(a,b)==0) return “0”;
if(cmp(a,b)==-1) {
cout<<”-“;
return sub(b,a);
}
string c;
int i = a.size()-1,j = b.size()-1,t = 0;
while(i>=0||j>=0||t!=0) {
t = a[i–] - t - ‘0’;
if(j>=0) t-=b[j–] - ‘0’;
c += (t+10)%10 + ‘0’;
t = t<0? 1: 0;
}
while(c.size()>1&&*c.rbegin()==‘0’) c.erase(c.size()-1);
return string(c.rbegin(),c.rend());
}
// 高精度乘法
string mul(string a,int b) {
if(a==”0”||b==0) return “0”;
string c;
int i = a.size()-1,t = 0;
while(i>=0||t!=0) {
if(i>=0) t+= (a[i–]-‘0’)*b;
c += t%10+‘0’;
t/=10;
}
return string(c.rbegin(),c.rend());
}
// 高精度除法
string div(string a, int b, int& r) {
string c;
r = 0;
for (int i = 0; i < a.size(); i++) {
r = r * 10 + a[i] - ‘0’;
c += r / b + ‘0’;
r %= b;
}
while (c.size() > 1 && c[0] == ‘0’) c.erase(0, 1);
return c;
}
int cmp(string a,string b) {
return a==b?0:a.size()>b.size()?1:a.size()[HTML_REMOVED]b?1:-1; // 这句话和下面注释内容等价
// if(a==b) return 0;
// if(a.size()>b.size()) return 1;
// if(a.size()[HTML_REMOVED]b? 1 : -1;
}