gpt4 book ai didi

c++ - Bigint Division 总是返回零

转载 作者:行者123 更新时间:2023-11-28 05:10:56 25 4
gpt4 key购买 nike

我目前正在使用提供给我的 bigint 类。我成功地创建了加减法和乘法运算,但是我似乎无法破解除法运算符。

我并不急于求出商的余数,我只对小数点前的数字感兴趣。我还添加了一些检查。第一个是如果第二个数字为零,则它将返回零。第二个检查是如果第二个数字大于第一个我返回零,因为我对零以下的数字不感兴趣。

下面是我的代码以及到目前为止我为这个大 int 运算符所做的工作。

Bigint operator/ (const Bigint& n1, const Bigint& n2) {

Bigint final;
Bigint quotient;
int count = 0;
Bigint result = n1;
Bigint check;


for(int i = 0; i < DIGITS; ++i) {
if(n2.digits[i] == 0){

quotient = 0;
}

else if (n2.digits[i] > n1.digits[i]){

quotient = 0;
}

else {

while (result.digits[0] > 0){
for(int i = 0; i < DIGITS; ++i){
result.digits[i] -= n2.digits[i];
if(result.digits[i] < 0){
result.digits[i] += 10;
result.digits[i+1] = -1;
}
}
count++;
}


for(int j = 1; j < DIGITS; j++){
final.digits[j] = count % 10;
count = count / 10;
}
return final;
}

}
return final;


}

无论我在我的程序中输入什么,它总是返回一个零,我已经处理了好几个小时,但我终其一生都无法破解它。非常感谢任何帮助。

一些期望结果的例子是:

987654321 / 123456789 = 8
123425 / 545 = 226

干杯

最佳答案

I am not fussed on getting the remainder of a quotient I am only interested in the number prior to the decimal.

您需要决定要尝试使用哪种数字以及要实现哪种除法。整数没有“小数”(不管它是什么)。实数除法没有余数。

The second check is if is if the second number is greater than the first

你不是在检查那个,你是在检查第二个数字的每个数字是否大于第一个数字的相应数字。 222 和 999 会通过,但 222 和 990 会失败。

Bigint quotient;

仅分配,从未使用。

int count = 0;

这是您的最终结果(您稍后将其转换为 Bigint)。如果除法结果不适合 int,它可能会溢出.有什么意义 Bigint那么呢?

while (result.digits[0] > 0){

这似乎根本不正确。为什么在结果的最低有效位中看到 0 时停止循环?看起来你想在整体结果为零或低于零时停止。

result.digits[i+1] = -1;

负数?也许你想要 result.digits[i+1] -= 1;

count++;

你正在实现除法的重复减法。虽然在数学上是正确的,但它相当慢。 1000000000000000000000000000/2 将花费 loooooooooong 时间来计算。

for(int j = 1; j < DIGITS; j++){

可能应该从 0 开始,就像任何好的小 for循环。

关于c++ - Bigint Division 总是返回零,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43517537/

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