大数加减比较

 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();
}

猜你喜欢

转载自blog.csdn.net/weixin_50904510/article/details/121431799