Jak możemy zaimplementować operator modulo jako funkcję w C bez korzystania z operatora?Implementacja operatora modulo jako funkcji w C
Odpowiedz
prosty:
Jeżeli iloraz
a/b
się przedstawić wyrażenie(a/b)*b + a%b
równaa
(poziom C99 6.5.5/6).
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);
}
Proszę bardzo:
a % b = a - (b * int(a/b))
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ł. –
@ JonathanLeffler, czy możesz wyjaśnić, który z nich nie działa w C. – user674669
@ user674669: W C będziesz musiał napisać '(int) (a/b)'. Notacja typu "int (a/b)" jest specyficzna dla C++. –
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ć.
Może to być powolne, ale użyteczne, jeśli komputer nie ma funkcji mnożenia/dzielenia. – user674669
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
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 .
jak to się różni od odpowiedzi @fbrereto? – prasun
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. –
@prasun Unikalność nie jest wymagana w przypadku SO. – EJP
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
@Clifford: Może dlatego, że z oczywistą transformacją (odejmij '(a/b) * b' z obu stron) staje się formułą dla określenia' a% b'? – caf
@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