2010-04-18 158 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