2010-04-18 40 views

回答

5

简单:

如果商a/b可表示,表达(a/b)*b + a%b应等于a

(C99标准,6.5.5/6)。

+15

这并不直接回答这个问题,它仅仅是%运算符的公理定义(因此不是真正的“简单”)。我想知道这个票数。 – Clifford 2010-04-18 08:17:15

+5

@Clifford:可能是因为有了明显的转换(从两边减去'(a/b)* b'​​)它就成为确定'a%b'的公式了吗? – caf 2010-04-18 08:49:53

+4

@ caf:也许,但“简单”本来是为了呈现“明显的”转变,而不是假设读者拥有(虽然是基本的)数学技能。 OP的数学能力未知;假设它很明显可能看起来像炫耀。 – Clifford 2010-04-18 15:24:23

37

做一个整数除法,然后乘以,然后减去。

#include <stdio.h> 
int main() 
{ 
    int c=8, m=3, result=c-(c/m*m); 
    printf("%d\n", result); 
} 
6

在这里你去:

a % b = a - (b * int(a/b)) 
+3

这个转换符号只适用于C++(不是C,问题会提到这个问题),而且如果a和b是整数,那么它就是多余的。但是downvote来自其他地方。 – 2010-04-18 07:08:03

+0

@JonathanLeffler,能否请你解释一下这在C中是行不通的。 – user674669 2012-10-07 16:42:43

+4

@ user674669:在C语言中,你必须编写'(int)(a/b)'。类型函数符号“int(a/b)”特定于C++。 – 2012-10-07 16:45:44

4

您可以通过重复地从x减去y和跟踪结果的模拟x % y。在每次迭代中,如果结果小于y,那么你有余数,并且可以返回它。

+2

如果计算机没有乘法/除法功能,这可能会很慢但很有用。 – user674669 2012-10-07 16:41:40

+1

这不是真正的软件实现是如何工作的。一个真正的软件实现会使第二个操作数翻倍,直到另一个操作数增加一倍,减去第二个操作数,然后开始将第二个操作数除以二并减去。 – EJP 2016-08-22 10:07:36

0

股息/除数=商数

式(在Python 3)低于:

Modolus =红利 - 分红//除数*除数

例如,如果股息= 5,和除数= 2,则

模量= 5 - 5 // 2 * 2成为 5 - 2 * 2 5 - 4 记住//的H比 - 更高的优先级,所以5 // 2首先是 。

+0

它与@fbrereto的答案有什么不同? – prasun 2015-11-01 16:55:37

+0

这只是不同的语言,我解释了一些事情,使公式更清晰。我使用Python 3.如果您有权访问Python 3,请键入它。一旦你把它启动并运行在Python中,那么很容易用你最喜欢的语言来做同样的事情。 – 2015-11-01 17:11:56

+1

@prasun唯一性不是SO中的要求。 – EJP 2016-08-22 10:04:45