【问题标题】:subtractings arrays of ints in c++在 C++ 中减去整数数组
【发布时间】:2014-07-14 07:05:13
【问题描述】:

我有两个大小为 40 的整数数组。它们是 HugeInteger 类的对象。我需要减去它们。我的代码是

HugeInteger HugeInteger::subtract(HugeInteger other)
{
    int diff;
    HugeInteger result;
    for (int i=0; i<MAXDIGIT; i++)
    {

        diff=this ->myArray[i]-other.myArray[i];
        if (other.myArray[i] < this -> myArray[i])
        {
            result.myArray[i]=diff;
        }
        else
        {
            result.myArray[i]=other.myArray[i]-this->myArray[i];
        }
    }

    return result;

}

问题是上面的代码没有给我正确的答案。我用计算器查了一下,有些数字是对的,有些是错的。我认为问题可能在于如果减法会导致数字为负,我如何处理借款。有人能帮助我吗?我已经尝试了 8 个小时。

【问题讨论】:

  • 什么是HugeInteger
  • 您的diff 的宽度是否足以容纳减法结果?
  • 去掉diff,直接计算结果,问题还存在吗?
  • “问题可能是我如何处理借款”。相反,问题在于您根本不处理借款。要正确编程,您需要回忆一下如何用纸和铅笔做减法,而不是用计算器。
  • 直接计算问题依然存在。 HugeInteger 是一个类,数组是 HugeInteger 对象

标签: c++ arrays subtraction


【解决方案1】:

您在谈论“借用”,但代码中没有。

代码,

HugeInteger HugeInteger::subtract(HugeInteger other)
{
    int diff;
    HugeInteger result;
    for (int i=0; i<MAXDIGIT; i++)
    {

        diff=this ->myArray[i]-other.myArray[i];
        if (other.myArray[i] < this -> myArray[i])
        {
            result.myArray[i]=diff;
        }
        else
        {
            result.myArray[i]=other.myArray[i]-this->myArray[i];
        }
    }

    return result;

}

似乎计算每个数字差的绝对值。


轻松进行减法的一种方法是计算要减去的数字的 N 的补码,然后只需相加,其中 N 是数字系统的基数(基数),并忽略最高有效数字的任何进位.

例如,要计算 55522 - 12345,首先计算 99999 - 12345 = 87654,这是以 10 为底的 9 的补码,然后在其上加 1,得到 87655,即 10 的补码,然后只需加 55522 + 87655 = 143177,并忽略进位,产生 43177。

检查:43177 + 12345 = 55522,万岁,成功了。

【讨论】:

    【解决方案2】:

    我认为在for loop 你应该使用这个。

     if ((other.myArray[i]) < (this -> myArray[i]))
     {
         result.myArray[i] = this ->myArray[i] - other.myArray[i];
     }
     else
     {
        result.myArray[i] = other.myArray[i] - this->myArray[i];
     }
    

    这将克服sizediff 变量的问题。 请检查...

    是的,在完成substract 功能代码后检查result 对象是否存在。 这也可能导致问题。如果是这样,请在函数中创建HugeInteger类的对象,然后return同样

    希望对你有帮助

    【讨论】:

    • 这会返回错误的答案。只要减法会使其变为负数,这些数字就不正确
    • @arisonu123 你能告诉我数组的内容吗?至少其中几个。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-08-12
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-06-14
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多