【问题标题】:C++ Programming the division alogrithmC++ 编程除法算法
【发布时间】:2014-10-24 11:34:28
【问题描述】:

除法算法说明给定两个整数ad,且d≠0,存在唯一整数qr 使得 a = qd + r 和 0 ≤ r ,其中 | d| 表示d 的绝对值。整数q为商,r为余数,d为除数,a为被除数.提示用户输入除数和除数,然后显示除法算法的结果:

如果 a = 17 且 d = 3,则 q = 5 且 r = 2,因为 17 = 5 * 3 + 2。
如果 a = 17 且 d = -3,则 q = -5 且 r = 2,因为 17 = -5 * -3 + 2。


整数除法的 C++ 运算符不符合除法算法。在向程序用户显示的输出中解释何时预期结果与除法算法不一致。该程序不应尝试解决此问题。

好的,所以我这几天一直在尝试解决这个问题,但我就是无法破解它。我能想到解决这个问题的唯一方法是使用 mod 来找到 r 或使用连续减法来找到 q。但是,我很确定这两种解决方案都不算数。有没有其他方法可以解决这个问题?

[编辑] 我认为连续减法不起作用,因为那只是欧几里得算法,所以我真的不会使用这个算法,使用模数就像使用 C++ 除法运算符一样。

【问题讨论】:

  • 首先编写一个程序,在给定 adqr /i>。然后,将问题描述中显示的示例值插入该函数,并查看 qr 的值。如果您在编写除法函数时遇到问题,请展示您所做的工作以寻求帮助。

标签: c++ algorithm division


【解决方案1】:

这里有一个提示。对于正数,一切正常。

C++ 表达式q = 17/3 产生q == 5

但是对于负数:

表达式q = -17/3 产生q == -5

【讨论】:

    【解决方案2】:

    就问题的措辞而言,我很确定您应该使用 mod 来查找 r 并使用除法运算符来查找 q。它直截了当地说“用于整数除法的 C++ 运算符不符合除法算法。在向程序用户显示的输出中解释何时预期结果与除法算法不一致。程序不应尝试解决此问题。 "这意味着,不要想太多,而只是演示操作员如何不符合算法而不尝试修复任何东西。

    假设您的代码天真地使用 C++ 运算符计算 qr,如下所示:

    int q = a / d;
    int r = a % d;
    

    然后在以下两种情况下,qr 的值都会出错(在这种情况下,错误只是意味着它们不“符合”您的算法):

    1. a = -17, b = 3

      代码将导致:

      q = -5, r = 2

      这不符合除法算法,因为

      -5 * 3 + 2 = -13 所以你显然搞错了qr

    2. a = -17, b = -3

      代码将导致:

      q = 5, r = -2

      这不符合除法算法,因为有一个规则0 <= r < |d|。换句话说,r 必须是正数。

    在其他情况下,即ad 均为正数,或者当a 为正数而d 为负数时,C++ 运算符将正确“符合”您的算法。

    【讨论】:

    • 这是有道理的。每次我考虑使用 mod 时,我都想添加一个 if 语句,这样它就不会变成负数,我知道这是整个“不要修复它”部分。我只是想了整件事。
    【解决方案3】:

    只有当被除数和除数都是正数时,C++ 整数除法运算符才会给出正确的结果。这是因为它总是向零舍入

    【讨论】:

      【解决方案4】:

      由于问题没有明确说明问题,我认为您想像提供的示例一样输出版本,所以一个简单的代码是:

      int a=17;
      int b=-3;
      cout<<"If a="<<a<<"and b="<<b<<"then q="<<a/b<<"and r="<<a%b;
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 2013-09-26
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多