大数加法,减法,除法C++实现,可以直接使用

该篇博客详细介绍了如何实现大数的比较、加法、减法和除法操作,以及将整数转换为字符串的方法。提供的代码示例可以独立使用,适用于处理大数的计算需求。虽然代码可能不完全正确,但博主欢迎读者指出错误和提问。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.首先实现两个字符串形式的大数大小比较

int cmp(string a,string b)    //若a>b,则返回1,若a==b,则返回-1,若a<b,则返回0
{
    a=a.substr(a.find_first_not_of('0'));
    b=b.substr(b.find_first_not_of('0'));
    if(a.length()>b.length())
        return 1;
    else if(a.length()==b.length())
    {
        if(a>b)
            return 1;
        else if(a==b)
            return -1;
        return 0;
    }
    else
        return 0;
}

2.大数加法的实现

string add(string a,string b)
{
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    int len=b.length();
    int lenb=a.length();
    string ans(len+10,'0');
    int d1,temp=0;
    int d2,sum;
    for(int i=0; i<len+10; i++)
    {
        if(i<lenb)
        {
            d1=a[i]-'0';
            d2=b[i]-'0';
            sum=d1+d2+temp;
        }
        else if(i<len)
        {
            d1=b[i]-'0';
            sum=d1+temp;
        }
        else
        {
            sum=temp;
        }
        ans[i]=sum%10+'0';
        temp=sum/10;
    }
    reverse(ans.begin(),ans.end());
    ans=ans.substr(ans.find_first_not_of('0'));
    return ans;
}

3.大数减法的实现

string subtract(string a,string b)
{
    reverse(a.begin(),a.end());
    reverse(b.begin(),b.end());
    string ans=a;
    for(int i=0; i<b.length(); i++)
    {
        int k=1;
        if((a[i]-'0')<(b[i]-'0'))
        {
            while(a[i+k]=='0')
            {
                a[i+k]='9';
                k++;
            }
            a[i+k]=(a[i+k]-'0')-1+'0';
            ans[i]=a[i]-'0'+10-(b[i]-'0')+'0';
        }
        else
        {
            ans[i]=a[i]-'0'-(b[i]-'0')+'0';
        }
    }
    for(int j=b.length(); j<a.length(); j++)
    {
        ans[j]=a[j];
    }
    reverse(ans.begin(),ans.end());
    ans=ans.substr(ans.find_first_not_of('0'));
    return ans;
}

4.将整数转换为字符串 (后面大数除法会用到)

void i2s(int n,string&str)
{
    stringstream sstr;
    sstr << n;
    str = sstr.str();
}

5.大数除法的实现(仅实现了除数大于被除数的情况)

string divide(string a,string b,int m)   //m为小数点后多少位,
{
    string ans="0.";
    for(int i=0; i<m; i++)
    {
        a.append("0");
        int t=0;
        while(cmp(a,b)==1)
        {
            a=subtract(a,b);
            t++;
        }
        string str;
        i2s(t,str);
        ans.append(str);
    }
    return ans;
}

上面的代码实现都可以单独使用,不保证完全正确,欢迎指出错误,有不明白的也欢迎留言.

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值