演算法-N進位制加法
阿新 • • 發佈:2021-01-30
技術標籤:資料結構與演算法分析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;
}