C ++编程除法算法

时间:2014-08-30 18:23:56

标签: c++ algorithm division

  

除法算法表明给定两个整数 a d d ≠0,存在唯一的整数 q r 使得 a = qd + r 且0 ≤r< | d | ,其中 | 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 ++除法运算符一样。

4 个答案:

答案 0 :(得分:3)

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

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

但对于负数:

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

答案 1 :(得分:2)

问题的措辞方式,我非常确定 应该使用mod来查找r,并使用除法运算符来查找q。它直接说&#34;整数除法的C ++运算符不符合除法算法。在显示给程序用户的输出中解释何时期望结果不同于除法算法。该计划不应试图解决此问题。&#34;这意味着,不要过度思考它,而只是演示运营商如何不遵守算法而不试图解决任何问题。

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

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

您接下来的错误(在这种情况下,错误只是意味着他们不会对您的算法进行符合&#34;)以下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必须为正。

  3. 在其他情况下,即ad均为正数或a为正且d为负数时,C ++运算符将正确#34 ;符合&#34;你的算法。

答案 2 :(得分:1)

由于问题没有明确说明问题,我认为你想要像提供的例子一样输出分割,所以一个简单的代码就是:

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

答案 3 :(得分:1)

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