【一次过】Lintcode 1398. K进制加法

给出一个kab,代表ab都是一个k进制的数,输出a + b的k进制数。

样例

样例1

输入: k = 3, a = "12", b = "1"
输出: 20
解释: 
12 + 1 = 20 in 3 bases.

样例2

输入: k = 10, a = "12", b = "1"
输出: 13
解释: 
12 + 1 = 13 in 10 bases.

注意事项

  • 2 <= k <= 10
  • a, b均为字符串,长度不超过1000
  • 可能有前导零

解题思路:

按照从后向前依次处理即可。

注意处理前导0和最后的进位。

public class Solution {
    /**
     * @param k: The k
     * @param a: The A
     * @param b: The B
     * @return: The answer
     */
    public String addition(int k, String a, String b) {
        // Write your code here
        if(a == null || b == null || a.length() == 0 || b.length() == 0)
            return "0";
        
        //去除前导0
        int i;
        for(i = 0; i < a.length(); i++)
            if(a.charAt(i) != '0')
                break;
        a = a.substring(i);
        
        for(i = 0; i < b.length(); i++) 
            if(b.charAt(i) != '0') 
                break;
        b = b.substring(i);
        
        int p = a.length() - 1;
        int q = b.length() - 1;
        int cnt = 0;
        StringBuilder sb = new StringBuilder();

        while(p >= 0 && q >= 0){
            int tmp = (a.charAt(p) - '0') + (b.charAt(q) - '0') + cnt;
            cnt = tmp / k;
            sb.insert(0, tmp % k);
            p--;
            q--;
        }
        
        while(p >= 0){
            int tmp = (a.charAt(p) - '0') + cnt;
            cnt = tmp / k;
            sb.insert(0, tmp % k);
            p--;
        }
        
        while(q >= 0){
            int tmp = (b.charAt(q) - '0') + cnt;
            cnt = tmp / k;
            sb.insert(0, tmp % k);
            q--;
        }

        
        if(cnt != 0)
            sb.insert(0, cnt);
        
        return sb.toString();
    }
}

 

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值