str.erase(0,str.find_first_not_of('0'));//去除结果中多余的前导0
carry为借位和进位
string add(string str1,string str2)
{
string str;
int len1=str1.length();
int len2=str2.length();
if(len1>len2)
for(int i=1;i<=len1-len2;i++)
str2='0'+str2;
else
for(int i=1;i<=len2-len1;i++)
str1='0'+str1;
//前补0,使两串长度相等
int temp,carry=0;
len1=str1.length();
for(int i=len1-1;i>=0;i--)
{
temp=str1[i]-'0'+str2[i]-'0'+carry;
carry=temp/10;
temp%=10;
str=char(temp+'0')+str;
}
if(carry!=0) str=char(carry+'0')+str;
return str;
}
string sub(string str1,string str2)
{
string str;
int temp=str1.length()-str2.length();//已知谁大谁小
int carry=0;
//两个串从后往前,先处理短串的长度
for(int i=str2.length()-1;i>=0;i--)
{
if(str1[temp+i]-str2[i]-carry<0)// <0要借位,+10
{
str=char(str1[temp+i]-str2[i]+'0'-carry+10)+str;
carry=1;
}
else
{
str=char(str1[temp+i]-str2[i]+'0'-carry)+str;
carry=0;
}
}
//在处理长串剩下的
for(int i=temp-1;i>=0;i--)
{
if(str1[i]-carry<'0')
{
str=char(str1[i]-carry+10)+str;
carry=1;
}
else
{
str=char(str1[i]-carry)+str;
carry=0;
}
}
str.erase(0,str.find_first_not_of('0'));//去除结果中多余的前导0。加法不用,因为越加越多
return str;
}
bool compare(string a,string b)
{
if(a.length()==b.length()) return a>=b;
else return a.length()>=b.length();
}