将 String 转换为 int 数组后如何正确减去 2 个数字

我目前被困在以两个字符串(由数字组成)作为参数的算法中。步骤是:

  1. 将字符串转换为 int 数组

  2. 反转此数组,使 String(123456) 数组看起来像:int[654321]。

  3. 从两个制作的数组中减去值,并使用给定的算法将其保存到第三个(结果)数组。

  4. 从第三个(结果)表中读取值,向后读取它们并将结果保存到 String。

基本上,我目前正在学习 Uni 的算法和数据结构课程,我们在课堂上编写了这个算法,但它只在我减去 AB 时有效,其中 A > B。我目前的问题是我需要重构这使得我可以从 A 中减去 B,即使 B > A。

我试图添加一些依赖于 A > B || 的“if”语句 A < B 但我认为它不会带我到任何地方。

无论如何都不能改变的转换函数:


大话西游666
浏览 77回答 3
3回答

拉丁的传说

public static int[] convert(String number, int size){&nbsp; &nbsp; int[] tab = new int[size];&nbsp; &nbsp; int position = number.length() - 1;&nbsp; &nbsp; for (int i = 0; i < size; i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; if (position < 0) tab[i] = 0;&nbsp; &nbsp; &nbsp; &nbsp; else tab[i] = number.charAt(position--) - 48;&nbsp; &nbsp; }&nbsp; &nbsp; return tab;}public static String substract(String number1, String number2){&nbsp; &nbsp; String result = "";&nbsp; &nbsp; int size = Math.max(number1.length(), number2.length()) + 1;&nbsp; &nbsp; int[] tA = new int[size];&nbsp; &nbsp; int[] tB = new int[size];&nbsp; &nbsp; int[] tW = new int[size];&nbsp; &nbsp; tA = convert(number1, size);&nbsp; &nbsp; tB = convert(number2, size);&nbsp; &nbsp; for(int i = 0; i < size; i++) tW[i] = 0;&nbsp; &nbsp; for(int i = 0; i < size-1; i++)&nbsp; &nbsp; {&nbsp; &nbsp; &nbsp; &nbsp; tW[i+1] += (tW[i] + tA[i] - tB[i] + 10) / 10 - 1;&nbsp; &nbsp; &nbsp; &nbsp; tW[i] = (tW[i] + tA[i] - tB[i] + 10) % 10;&nbsp; &nbsp; }&nbsp; &nbsp; while(size > 1 && tW[size-1] == 0) size--;&nbsp; &nbsp; for(int i = size; i > 0; i--) result += (char)(tW[i-1] + 48);&nbsp; &nbsp; return result;}我预计 subtract("12", "20") 的输出为 -8,但实际输出为 /92。

慕田峪7331174

以下是一些使用 Java 8 的示例解决方案。如果您被允许使用它们,我建议您使用流,因为它们确实适合您的问题:convert:返回string中每个char的数值,转换成一个int数组。&nbsp; &nbsp; int[] convert(String s) {&nbsp; &nbsp; &nbsp; &nbsp; return s.chars().map(Character::getNumericValue).toArray();&nbsp; &nbsp; }reverse:反转一个int数组。&nbsp; &nbsp; int[] reverse(int[] toReverse) {&nbsp; &nbsp; &nbsp; &nbsp; return IntStream.range(0, toReverse.length)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(i -> toReverse[toReverse.length - 1 - i])&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .toArray();&nbsp; &nbsp; }substract:对于 0 和最大长度之间的范围,返回 int ina减去bat 位置int in 的值(i如果两者都存在),以结果数组的形式返回。&nbsp; &nbsp; int[] substract(int[] a, int[] b) {&nbsp; &nbsp; &nbsp; &nbsp; return IntStream.range(0, Math.max(a.length, b.length))&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .map(i -> {&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(i < a.length && i < b.length)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return a[i] - b[i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; if(i < a.length)&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return a[i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; return b[i];&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; })&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; .toArray();&nbsp; &nbsp; }

芜湖不芜

您可以做的是 if number1 < number2,计算number2 - number1,并在结果中加上负号。当然,如果相等,则结果为0。你需要比较number1和number2如下:if (number1.length() == number2.length()) {&nbsp; &nbsp; if (number1 > number2) {&nbsp; &nbsp; &nbsp; &nbsp; // number1 is greater then number2.&nbsp; &nbsp; } else {&nbsp; &nbsp; &nbsp; &nbsp; // number2 is greater than number1.&nbsp; &nbsp; }} else if (number1.length() > number2.length()) {&nbsp; &nbsp; // number1 is greater than number2.} else&nbsp; &nbsp; // number2 is greater than number1.}
打开App,查看更多内容
随时随地看视频慕课网APP

相关分类

Java