算法-N进制加法

时间:2025-04-01 20:03:15

N进制加法

  • 1、N进制加法

1、N进制加法

最近遇到了一个问题,如何实现36进制加法?这个问题挺有意思。对于常见的10进制和二进制,我们往往都是一加了之,相加之后进位,进位再与前面的一位相加,再重复上述步骤,就得到了我们想要的值,对于10进制内的数我们这样相加没啥问题,但是对于N进制,则需要考虑下其中的本质问题。

在10进制以内,我们通过取余得到了新的值,本质上是对0-9这十个数字进行了取余查字典,那么对于N进制,我们同样可以取余查字典,只不过字典需要我们自己构造。对于36进制来讲,我们可以把0-9,A-Z作为字典基础,它们的组合字串为字典集合,在取余时,用0-35索引值代替对应的进制字符,这样就可以了。

在以下代码中演示了36进制的加法,其实只需要修改字典集合base,换成不同长度的字符,就能实现任意进制的加法。

    @Test
    public void test(){
        System.out.println(add("9","1"));
    }

    private static String base="0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";

	public String add(String num1,String num2){
        String result="";
        int carry=0;
        int ptr1=num1.length()-1,ptr2=num2.length()-1;
        while (ptr1>=0||ptr2>=0||carry!=0){
            if(ptr1>=0){
                carry+=base.indexOf(num1.charAt(ptr1));
                ptr1--;
            }
            if(ptr2>=0){
                carry+=base.indexOf(num2.charAt(ptr2));
                ptr2--;
            }
            result=base.charAt(carry%base.length())+result;
            carry/=base.length();
        }
        return result;
    }