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.
}
添加回答
举报