字符串相加

1.阶乘尾部0的个数: 

class Solution {
    public int trailingZeroes(int n) {
        /*2*5=10 有一个0 因此判断n中包含的5及其倍数的个数
        n/5+n/5^2+n/5^3+....
        n/5表示不大于n的数中贡献一个
        n/5^2不大于n的数中5^2贡献一个。。。*/
        
        // return n==0?0:n/5+trailingZeroes(n/5);
        int count=0;
        while (n>0)
        {
            n=n/5;
            count=count+n;
        }
        return count;
    }
}

2.二进制相加==进位的问题是难点

class Solution {
    public String addBinary(String a, String b) {
      /*用carry表示两个位数相加是否进1
      如果a[i]==1,carry+1;b[i]==1,carry+1
      相加以后位数:0==carry%2;同时要进一位carry=carry/2
      如果a[i]==1,carry+1;b[i]==0,carry
      相加以后位数:carry+1==carry%2;同时进位carry=carry/2
      */  
        StringBuilder str=new StringBuilder();
        int carry=0;
        int i=a.length()-1,j=b.length()-1;
        while(carry==1||i>=0||j>=0){
            if(i>=0 && a.charAt(i--)=='1'){
                carry++;
            }
        
             if(j>=0 && b.charAt(j--)=='1'){
                carry++;
            }
           str.append(carry%2);
            carry/=2;
        }
        return str.reverse().toString();
    }
}

3.字符串相加=10进制相加

class Solution {
    public String addStrings(String num1, String num2) {
        /*与2进制加法同样的思路,但是要解决两个字符串长度不相等时候的进位问题
        x=i<0?0:a[i]
        这样就解决了进位和长度不相等的问题*/
        
        StringBuilder str=new StringBuilder();
        int i=num1.length()-1;
        int j=num2.length()-1;
        int carry=0;
        while(i>=0||j>=0||carry==1){
            int x=i<0?0:num1.charAt(i--)-'0';
            int y=j<0?0 :num2.charAt(j--)-'0';
            str.append((x+y+carry)%10);
            carry=(x+y+carry)/10;
            
        }
        return str.reverse().toString();
        
    }
}

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值