Bigint Division总是归零

时间:2017-04-20 10:54:59

标签: c++ biginteger division

我目前正在使用给我的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

干杯

1 个答案:

答案 0 :(得分:1)

  

我没有考虑获得商的余数我只对小数点前的数字感兴趣。

您需要确定要尝试使用的数字类型以及您实施的部门类型。整数没有“十进制”(无论它是什么)。实数除法没有余数。

  

第二个检查是否是第二个数字大于第一个

您没有检查,您正在检查第二个数字的每个数字是否大于第一个数字的相应数字。 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循环一样。