簡體   English   中英

使用遞歸將二進制 Integer 轉換為十進制 Integer

[英]Converting a Binary Integer to a Decimal Integer using Recursion

我無法讓這種方法正常工作,它將 integer 從二進制轉換為十進制。 我發現的主要問題是,對於以 0 結尾的二進制數,程序會忽略最后一個 0。 例如,如果我輸入 1010,程序將返回 5 而不是 10。下面是我進行此轉換的方法。

public int toDecimal(int inBase2){
    int num = 0;
    if(inBase2 < 0){
      num = -1;
      return num;
    }
    if(inBase2 == 0 && num == 0){
      return num;
    }else{
      num = inBase2 % 10 * (int)(Math.pow(2, Math.log10(inBase2)));
    return num + toDecimal(inBase2 / 10);
    }
  }

我將如何 go 以允許它正確讀取二進制 integer 中的最終 0 的方式修復程序?

您正在以錯誤的方式進行計算。 二進制數中的最低有效位被視為最高有效位。 如此有效,1010 返回 0101 的結果。現在,您處理的第一個數字在那個位置乘以Math.pow(2, Math.log10(inBase2)) ,並賦予最大權重。 相反,您應該將遞歸 function 的結果相乘,這樣后面的調用(代表更高值的數字)會乘以更多。 例子

public int toDecimal(int inBase2){
    int num = 0;
    if(inBase2 < 0){
        num = -1;
        return num;
    }
    if(inBase2 == 0 && num == 0){
        return num;
    }else{
        num = inBase2 % 10;
        return num + 2 * toDecimal(inBase2 / 10);
    }
}

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM