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。

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();
}

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.
}
添加回答
舉報