为了账号安全,请及时绑定邮箱和手机立即绑定

将 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 关注
  • 71 浏览

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信