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

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

將 String 轉換為 int 數組后如何正確減去 2 個數字

將 String 轉換為 int 數組后如何正確減去 2 個數字

大話西游666 2022-12-28 11:03:57
我目前被困在以兩個字符串(由數字組成)作為參數的算法中。步驟是:將字符串轉換為 int 數組反轉此數組,使 String(123456) 數組看起來像:int[654321]。從兩個制作的數組中減去值,并使用給定的算法將其保存到第三個(結果)數組。從第三個(結果)表中讀取值,向后讀取它們并將結果保存到 String。基本上,我目前正在學習 Uni 的算法和數據結構課程,我們在課堂上編寫了這個算法,但它只在我減去 AB 時有效,其中 A > B。我目前的問題是我需要重構這使得我可以從 A 中減去 B,即使 B > A。我試圖添加一些依賴于 A > B || 的“if”語句 A < B 但我認為它不會帶我到任何地方。無論如何都不能改變的轉換函數:
查看完整描述

3 回答

?
拉丁的傳說

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

public static int[] convert(String number, int size)

{

    int[] tab = new int[size];

    int position = number.length() - 1;

    for (int i = 0; i < size; i++)

    {

        if (position < 0) tab[i] = 0;

        else tab[i] = number.charAt(position--) - 48;

    }

    return tab;

}


public static String substract(String number1, String number2)

{

    String result = "";

    int size = Math.max(number1.length(), number2.length()) + 1;

    int[] tA = new int[size];

    int[] tB = new int[size];

    int[] tW = new int[size];


    tA = convert(number1, size);

    tB = convert(number2, size);


    for(int i = 0; i < size; i++) tW[i] = 0;


    for(int i = 0; i < size-1; i++)

    {

        tW[i+1] += (tW[i] + tA[i] - tB[i] + 10) / 10 - 1;

        tW[i] = (tW[i] + tA[i] - tB[i] + 10) % 10;

    }


    while(size > 1 && tW[size-1] == 0) size--;


    for(int i = size; i > 0; i--) result += (char)(tW[i-1] + 48);


    return result;

}

我預計 subtract("12", "20") 的輸出為 -8,但實際輸出為 /92。


查看完整回答
反對 回復 2022-12-28
?
慕田峪7331174

TA貢獻1828條經驗 獲得超13個贊

以下是一些使用 Java 8 的示例解決方案。如果您被允許使用它們,我建議您使用流,因為它們確實適合您的問題:


convert:返回string中每個char的數值,轉換成一個int數組。

    int[] convert(String s) {

        return s.chars().map(Character::getNumericValue).toArray();

    }

reverse:反轉一個int數組。

    int[] reverse(int[] toReverse) {

        return IntStream.range(0, toReverse.length)

                .map(i -> toReverse[toReverse.length - 1 - i])

                .toArray();

    }

substract:對于 0 和最大長度之間的范圍,返回 int ina減去bat 位置int in 的值(i如果兩者都存在),以結果數組的形式返回。

    int[] substract(int[] a, int[] b) {

        return IntStream.range(0, Math.max(a.length, b.length))

                .map(i -> {

                    if(i < a.length && i < b.length)

                        return a[i] - b[i];

                    if(i < a.length)

                        return a[i];

                    return b[i];

                })

                .toArray();

    }


查看完整回答
反對 回復 2022-12-28
?
蕪湖不蕪

TA貢獻1796條經驗 獲得超7個贊

您可以做的是 if number1 < number2,計算number2 - number1,并在結果中加上負號。當然,如果相等,則結果為0。


你需要比較number1和number2如下:


if (number1.length() == number2.length()) {

    if (number1 > number2) {

        // number1 is greater then number2.

    } else {

        // number2 is greater than number1.

    }

} else if (number1.length() > number2.length()) {

    // number1 is greater than number2.

} else

    // number2 is greater than number1.

}


查看完整回答
反對 回復 2022-12-28
  • 3 回答
  • 0 關注
  • 137 瀏覽
慕課專欄
更多

添加回答

舉報

0/150
提交
取消
微信客服

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

幫助反饋 APP下載

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

公眾號

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