gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 04:52:05 26 4
gpt4 key购买 nike

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

  1. 将字符串转换为整型数组
  2. 反转此数组,使 String(123456) 数组看起来像:int[654321]。
  3. 使用给定的算法从两个制作的数组中减去值并将其保存到第三个(结果)数组。
  4. 从第三个(结果)表中读取值,向后读取并将结果保存到字符串。

基本上,我目前正在 Uni 学习算法和数据结构类(class),我们在类里面编写了这个算法,但它仅在我减去 A-B 时有效,其中 A > B。我目前的问题是我需要将其重构到我可以从 A 中减去 B 的程度,即使 B > A。

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

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

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。

最佳答案

以下是一些使用 Java 8 的示例解决方案。如果您被允许使用它们,我建议您使用流,因为它们确实适合您的问题:

  • 转换:将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();
}
  • 减法:对于0到最大长度之间的范围,返回a中的int值减去 b 中的整数在位置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();
}

关于java - 将 String 转换为 int 数组后如何正确减去 2 个数字,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/56415598/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com