除法算法表明给定两个整数 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 ++除法运算符一样。
答案 0 :(得分:3)
这里有一个提示。对于正数,一切正常。
C ++表达式q = 17/3
会产生q == 5
。
但对于负数:
表达式q = -17/3
会产生q == -5
答案 1 :(得分:2)
问题的措辞方式,我非常确定 应该使用mod来查找r
,并使用除法运算符来查找q
。它直接说&#34;整数除法的C ++运算符不符合除法算法。在显示给程序用户的输出中解释何时期望结果不同于除法算法。该计划不应试图解决此问题。&#34;这意味着,不要过度思考它,而只是演示运营商如何不遵守算法而不试图解决任何问题。
假设您的代码天真地使用C ++运算符来计算q
和r
,如下所示:
int q = a / d;
int r = a % d;
您接下来的错误(在这种情况下,错误只是意味着他们不会对您的算法进行符合&#34;)以下q
和r
的值两种情况:
a = -17,b = 3
代码将导致:
q = -5, r = 2
这不符合除法算法,因为
-5 * 3 + 2 = -13
所以你明显错误q
和r
。
a = -17,b = -3
代码将导致:
q = 5, r = -2
这不符合除法算法,因为有0 <=
r < |d|
的规则。换句话说,r
必须为正。
在其他情况下,即a
和d
均为正数或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 ++整数除法运算符才会给出正确的结果。这是因为它总是向零舍入