亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

十二進制遞歸將整數轉換為字符串

十二進制遞歸將整數轉換為字符串

不負相思意 2023-10-19 21:47:51
我不知道如何為字符串值分配一個數字并使其自動識別以使數字成為字符串值。問題如下:遞歸地編寫該方法: 1) 考慮當數字小于 12 時僅返回數字本身的基本情況(除以 12 時商將為 0,余數為數字)。如果數字是 10 或 11,則返回“A”或“B”。2) 考慮數字大于或等于 12 的遞歸情況。在這種情況下,首先使用商遞歸調用該方法,并將結果(使用 + 運算符連接字符串)與另一個遞歸調用的結果連接起來,使用其余的。返回兩個遞歸調用的串聯結果。一個例子; 20A 是:2×12^2 + 0×12^1 + 10×12^0 = 2×144 + 0×12 + 10×1 = 288 + 0 + 10 = 298我知道現在的代碼是完全錯誤的public class Duodecimal {  public static String toBase12(int n) {    //TODO: complete this method    if (n==10)    return "A";    if (n==11)    return "B";    if (n<12)    return n;    else {      if (n%12==10)      return (n/12 + "A");      if (n%12==11)      return (n/12 + "B");      else      return n/12;    }  }}
查看完整描述

3 回答

?
繁花如伊

TA貢獻2012條經驗 獲得超12個贊

你幾乎正確地完成了#1(return n無法編譯),所以讓我們看看#2:

考慮數字大于或等于 12 的遞歸情況。在這種情況下,首先使用商遞歸調用該方法,然后使用余數將結果(使用 + 運算符連接字符串)與另一個遞歸調用的結果連接起來。返回兩個遞歸調用的串聯結果。

讓我們一步一步來,處理大膽的部分。

首先使用商遞歸調用該方法

int quotient = n / 12;

首先使用商遞歸調用該方法

toBase12(quotient)

使用余數的另一個遞歸調用的結果

int remainder = n % 12

使用余數的另一個遞歸調用的結果

toBase12(remainder)

[...] 并將結果(使用 + 運算符連接字符串)與 [...] 連接起來

toBase12(quotient) + toBase12(remainder)

返回兩個遞歸調用的串聯結果

我們也消除變量:

return toBase12(n / 12) + toBase12(n % 12)

正如您所看到的,作業包括您應該做什么的分步說明。您所要做的就是編寫向您解釋的代碼。

最終結果是:

public static String toBase12(int n) {

    if (n < 10)

        return Integer.toString(n); // or  String.valueOf(n)  or  "" + n

    if (n == 10)

        return "A";

    if (n == 11)

        return "B";

    return toBase12(n / 12) + toBase12(n % 12);

}

測試

System.out.println(toBase12(298));

輸出

20A


查看完整回答
反對 回復 2023-10-19
?
慕森王

TA貢獻1777條經驗 獲得超3個贊

在一張紙上,你可以這樣寫:

  1. 將輸入除以十二并保存余數。

  2. 將結果再次除以十二并保存余數。

  3. 繼續第二步,直到結果為零。從下到上連接每個步驟的余數。

使用您的示例輸入:

298 / 12 = 24 rem 10 (A)
 24 / 12 = 2  rem 0
  2 / 12 = 0  rem 2

因此

298 in base 10 = 20A in base 12


查看完整回答
反對 回復 2023-10-19
?
胡說叔叔

TA貢獻1804條經驗 獲得超8個贊

這是一種使用尾遞歸來實現的方法。第二種方法會累積,直到減到零,然后返回。


public class Base12 {

    public static String toBase12(int n) {

        return toBase12(n, "");

    }


    private static String toBase12(int n, String value) {

        return n <= 0 ? value : toBase12(n/12, toBase12Char(n%12) + value);

    }


    private static char toBase12Char(int n) {

        return n == 11 ? 'B' : (n == 10 ? 'A' : Integer.toString(n).charAt(0));

    }

}


public class Base12Test {

    @Test

    public void Test20A() {

        int n = 298;


        String expectedValue = "20A";

        String actualValue = Base12.toBase12(n);


        Assert.assertEquals(expectedValue, actualValue);

    }

}


查看完整回答
反對 回復 2023-10-19
  • 3 回答
  • 0 關注
  • 169 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號