gpt4 book ai didi

java - 具有两个不同整数对象数组的 add 方法

转载 作者:行者123 更新时间:2023-12-01 18:09:04 24 4
gpt4 key购买 nike

我正在尝试在类中实现一个方法,该方法创建并返回一个新对象,该新对象是由被调用对象和其他对象表示的整数之和。

例如

BigInt val1 = new BigInt(1111111);
BigInt val2 = new BigInt(2222);
BigInt sum = val1.add(val2);
System.out.println(sum);
should print
1113333

我的 add 方法似乎工作正常,但是当它到达最后一个索引时,它不会将 1 带到最后一个索引。这是我的代码和测试用例。

public BigInt add(BigInt other) {
// int length = this.digits.length < other.digits.length ? this.digits.length : other.digits.length;
BigInt added = new BigInt();
int MAX_numsig = this.numSigDigits < other.numSigDigits ? other.getNumSigDigits() : this.getNumSigDigits();

added.numSigDigits = MAX_numsig;


if (other == null) {
throw new IllegalArgumentException("parameter is null");
}
if (this.getNumSigDigits() >= SIZE || other.getNumSigDigits() >= SIZE) {
throw new ArithmeticException("Sum size bigger than final static value SIZE");
}
int carry = 0;
for (int i = this.digits.length - 1; i >= 0; i--) {


if (this.digits[i] + other.digits[i] + carry < 10) {
added.digits[i] = this.digits[i] + other.digits[i] + carry;
carry = 0;

}
if (this.digits[i] + other.digits[i] + carry >= 10) {
added.digits[i] = (this.digits[i] + other.digits[i] + carry) % 10;

if (i == SIZE - MAX_numsig) {
added.numSigDigits = MAX_numsig + 1;
}
if (i == 0) {
throw new ArithmeticException("overflow");
} else {
carry = 1;
}
}

}



return added;

}

这是测试用例:

 System.out.println("Test 12: result should be\n123456789123456789");
int[] a4 = {3, 6, 1, 8, 2, 7, 3, 6, 0, 3, 6, 1, 8, 2, 7, 3, 6};
int[] a5 = {8, 7, 2, 7, 4, 0, 5, 3, 0, 8, 7, 2, 7, 4, 0, 5, 3};
BigInt b4 = new BigInt(a4);
BigInt b5 = new BigInt(a5);
BigInt sum2 = b4.add(b5);
System.out.println(sum2);
System.out.println();

此测试用例应返回 123456789123456789。相反,它返回 23456789123456789。我不明白为什么 1 没有在最后一个索引处通过。

SIZE 是默认的静态最终值 20。谁能帮我解决错误吗?

最佳答案

原因是两个数字之和的位数可能大于两个数字,例如在您给定的示例中,总和的位数是 18,而两个值的位数都是 17。但是您的代码没有考虑这部分。

因此,如果和的位数较大,则循环存在后会有进位值。您应该将进位值添加到结果中。

希望有帮助。如果您不明白任何部分,请告诉我。

关于java - 具有两个不同整数对象数组的 add 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60499567/

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