2010-04-18 26 views

Odpowiedz

5

prosty:

Jeżeli iloraz a/b się przedstawić wyrażenie (a/b)*b + a%b równa a

(poziom C99 6.5.5/6).

+15

Nie odpowiada to bezpośrednio na pytanie, jest po prostu aksjomatyczną definicją operatora% (a zatem nie jest tak naprawdę "prosta"). Zastanawiam się nad liczbą głosów za tym. – Clifford

+5

@Clifford: Może dlatego, że z oczywistą transformacją (odejmij '(a/b) * b' z obu stron) staje się formułą dla określenia' a% b'? – caf

+4

@caf: Być może, ale "proste" byłoby przedstawienie "oczywistej" transformacji, zamiast zakładać, że czytelnik posiada (choć podstawowe) umiejętności matematyczne. Matematyczna zdolność PO jest nieznana; założenie, że to oczywiste, może wyglądać jak popisywanie się. – Clifford

37

Wykonaj podział całkowity, a następnie mnożenie i odejmij.

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

Proszę bardzo:

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

Ta notacja rzutowania działa tylko w C++ (nie C, o które pyta pytanie) i jest zbędna, jeśli a i b są liczbami całkowitymi. Ale wynik głosowania pochodził z innych źródeł. –

+0

@ JonathanLeffler, czy możesz wyjaśnić, który z nich nie działa w C. – user674669

+4

@ user674669: W C będziesz musiał napisać '(int) (a/b)'. Notacja typu "int (a/b)" jest specyficzna dla C++. –

4

Można symulować x % y wielokrotnie przez odjęcie y z x i śledzenie wyniku. Przy każdej iteracji, jeśli wynik jest mniejszy niż y, masz resztę i możesz ją po prostu zwrócić.

+2

Może to być powolne, ale użyteczne, jeśli komputer nie ma funkcji mnożenia/dzielenia. – user674669

+1

To nie działa prawdziwe implementacje oprogramowania. Prawdziwa implementacja oprogramowania podwaja drugi operand, aż kolejne podwojenie sprawi, że będzie większe niż pierwsze, odejmij, a następnie zacznij dzielić drugi operand przez dwa i odjąć. – EJP

0

Dywidenda/dzielnik = Iloraz

Wzór (Pythona 3) poniżej:

Modolus = Divident - Dywidendy // dzielnik * dzielnik

Na przykład, jeśli dywidenda = 5 i dzielnik = 2, a następnie

Moduł = 5 - 5 // 2 * 2, który staje się 5 - 2 * 2 5 - 4 pamiętać, że ma // h Pierwszeństwo jest niższe niż -, więc 5 // 2 jest oceniane najpierw jako .

+0

jak to się różni od odpowiedzi @fbrereto? – prasun

+0

Jest tylko inny język, wyjaśniłem kilka rzeczy, aby formuła była bardziej przejrzysta. Użyłem Pythona 3. Jeśli masz dostęp do Pythona 3, wpisz go. Po uruchomieniu w Pythonie łatwo jest zrobić to samo w swoim ulubionym języku. –

+1

@prasun Unikalność nie jest wymagana w przypadku SO. – EJP