大数相加算法

    在一些时候,int或者long类型的数据往往满足不了数据容量的要求,这时需要用到数组或者字符串进行操作。考虑到数据的位数并不是一个确定的值,运用string来处理可以简化思维。在进行运算之前,需要明确下面几点要求:

1.将两组数据中位数大的放在前面,方便后面处理;

2.字符转数字,减去‘0’;数字转字符加上‘0’;

3.进位考虑

4.最高位时进位判断

以下是大数相加函数:

string BigPlus(string num1,string num2){
    //默认使得num1位数大于num2,方便后续运算。
    if(num1.size()<num2.size()){
        string temp=num2;
        num2=num1;
        num1=temp;
    }
    int lenth1=num1.size(),lenth2=num2.size(),flag=0,a,b,sum;//初始化位数、进位标志、定义转换数字a、b和sum
    while(lenth1>0){//lenth1总是大于等于lenth2
        a=num1[lenth1-1]-'0';//转换为数字
        if(lenth2>0){
            b=num2[lenth2-1]-'0';//转换为数字
        }
        else{
            b=0;//num2位数加完了
        }
        sum=a+b+flag;//当前位加进位
        if(sum>=10){//进位判断
            flag=1;//进位标记
            num1[lenth1-1]='0'+sum%10;//取个位
        }
        else{
            flag=0;//进位标记清除
            num1[lenth1-1]='0'+sum;
        }
        //每次向前进位
        lenth1--;
        lenth2--;
    }
    if(flag){
        num1="1"+num1;//当最高位进位,在前面加1
    }
    return num1;//返回得到的和
}

 

  • 3
    点赞
  • 27
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值