1. 程式人生 > 其它 >演算法-N進位制加法

演算法-N進位制加法

技術標籤:資料結構與演算法分析java演算法

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){
        char
[] cs1=num1.toCharArray(); char[] cs2=num2.toCharArray(); int m=Math.max(cs1.length,cs2.length); int addin=0; String result=""; for (int i=0;i<m;i++){ int sum=addin; if(i<cs1.length){ char c=cs1[cs1.length-
1-i]; sum+=base.indexOf(c); } if(i<cs2.length){ char c=cs2[cs2.length-1-i]; sum+=base.indexOf(c); } result=base.charAt(sum%base.length())+result; addin=sum/base.length(); } if(addin!=0){ result =base.charAt(addin%base.length())+result; } return result; }