Java大数加法的实现

大数相加

随意给两个字符串类型的数字例如:“123545548”,计算他们的之和

实现思路

将字符串转为字符数组然后将字符转为整形一一相加。难点:进位问题

代码实现

public static String sum(String str1,String str2){
        char ch1[] = str1.toCharArray();
        char ch2[] = str2.toCharArray();
        int ch3[] =new int[(ch1.length>ch2.length)?ch1.length+1:ch2.length+1];//存放结果的数组
        int count=0;//进位计数器
        boolean flag=false;//数组第一位为0标记
        int i =ch1.length-1;
        int j=ch2.length-1;
        for (int z=ch3.length-1; i >=0&&j>=0;) {//相加数组一样长的部分
           int sum1=(ch1[i--]-'0')+(ch2[j--]-'0')+count;//相加结果
           ch3[z--]=sum1%10;//留位部分
           count=sum1/10;//进位部分
        }
        for(int z=ch3.length-((ch1.length<ch2.length)?ch1.length:ch2.length)-1;;z--){//复制剩下的部分
            if(count!=0&&z>=1){
                ch3[z]=(((ch1.length>ch2.length)?ch1[z-1]:ch2[z-1])-'0'+count)%10;
                count=(((ch1.length>ch2.length)?ch1[z-1]:ch2[z-1])-'0'+count)/10;
            }else if(count==0&&z>=1){
                ch3[z]=(((ch1.length>ch2.length)?ch1[z-1]:ch2[z-1])-'0')%10;
            flag=true;
            }else{
                break;
            }

        }
        if(count==0&&ch1.length==ch2.length){//如果第一位未进位去除第一位;
            flag=true;
        }else if(count!=0){
            ch3[0]=count;
        }
        String ret="";//遍历数组返回字符串
        int n=0;
        if(flag){
            n=1;
        }
        for(;n<ch3.length;n++){
            ret+=ch3[n];
        }
        return ret;
    }

 

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值