*,/和%的定义如何保证a / b * b + a%b == a?

时间:2017-06-20 20:43:55

标签: c++ algebra mod

根据PPP中的Straustrup,第68页,这是正确的。

使用代数我可以将其缩小为

   a/b * b + a%b == a
     a     + a%b == a,  // b in numerator and denominator cancel each other

但这仍然无法解释证明。

2 个答案:

答案 0 :(得分:2)

对于每两个整数ab,你有等式

a = n * b + r;

其中na可被b整除的次数,r是余数。

例如,如果a等于25b等于6,那么您可以写

a = 4 * 6 + 1
    n   b   r

使用C ++的运算符可以像

一样编写
a = a / b * b + a % b
      n           r

答案 1 :(得分:1)

您忽略了ab是整数的事实。

具有两个整数的运算符/将执行整数除法并丢弃余数。可以使用运算符%计算余数。 换句话说,表达式a/b表示b可以作为一个整体适合多少次。并a%b执行该操作后a中剩下的内容。表达式a - (a % b)的结果将不会将余数除以b。 因此(a / b) * b等于a - (a % b),它为我们提供了以下表达式(a / b) * b == a - (a % b)