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
- 1. Pytanie operatora modulo Perl
- 2. Konsekwentna implementacja operatora równości C#
- 3. Implementacja flag funkcji w C#
- 4. implementacja operatora sizeof
- 5. Implementacja operatora równości C# z F #
- 6. jak wywołać operatora jako funkcję w C++
- 7. Użyj operatora listy (a :: b) jako funkcji
- 8. C++: Używanie operatora dwóch typów wewnętrznych jako obiektu funkcji
- 9. Znaczenie przeciążania operatora -() jako funkcji bezpłatnej, a nie funkcji członka?
- 10. C++: przyjaciel funkcji w klasie szablonu dla operatora <<
- 11. Implementacja operatora konwersji dla wskaźnika
- 12. C++ szablon dla operatora wywołania funkcji
- 13. Implementacja RAII w C#
- 14. Implementacja operatora <=> dla opcjonalnego dodania
- 15. Implementacja funkcji Ord w Delphi
- 16. C# w operatora przeciążenia
- 17. Implementacja funkcji Traceroute w Androidzie
- 18. Przeciążanie operatora -> * w C++
- 19. Typowa implementacja operatora << funkcji pod względem funkcji członka wysypisko
- 20. Jak działa łańcuchowanie operatora w C++?
- 21. Przeciążanie operatora w C++
- 22. Przeciążanie operatora + w C++
- 23. Wskaźniki jako argumentów funkcji C
- 24. C# enums jako parametry funkcji?
- 25. C++ * vs [] jako parametr funkcji
- 26. Szybka implementacja MD5 w C++
- 27. Używanie operatora^w wizualnym C++
- 28. kodu C++ w funkcji jako argumentu
- 29. Zachowanie operatora sizeof w C
- 30. Implementacja funkcji Hashing MySQL
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