Mam problem z zapisaniem czegoś takiego:
if(x%2==0)
//wykonaj instrukcje
ale bez używania funkcji modulo. Ma ktoś jakiś pomysł?
Mam problem z zapisaniem czegoś takiego:
if(x%2==0)
//wykonaj instrukcje
ale bez używania funkcji modulo. Ma ktoś jakiś pomysł?
Zakładając, że x
jest liczbą nieujemną (unsigned int
), x % 2 == 0
można zastąpić x & 1 == 0
(gdzie &
oznacza binarne and
).
Dla dowlnego podzielnika: jak jak w matematyce.
Podzielić to bez ułamków, wymnożyć, i wynik mnożenia odjąć od początkowej liczby
Jako ciekawostka (nie jest to najlepszy pomysł) można wykorzystać zachowanie się dzielenia liczb w C/C++/Java/C# a więc to że (3 / 2 == 1):
((x / 2) * 2) == x
.
Zastępując operacje dzielenia przez >>
i <<
można też:
((x >> 1) << 1) == x
Na koniec pomysł zupełnie szalony: Math.pow(-1, x) > 0
.
Algorytm reszty z dzielenia to poziom szkoły podstawowej:
a%b -> Odejmuj b
od liczby a
dopóki wynik jest większy lub równy b
.
def modulo(a,b):
remainder = a
while remainder >= b:
remainder = remainder-b
return remainder
W przypadku dzielenia przez 2
wystarczy oczywiście sprawdzać tylko ostatni bit, bo on określa czy liczba jest parzysta czy nieparzysta.
tylko jak ten rozpisany mod zapisać jako warunek if bez tworzenia nowej funkcji? (to pseudokod, więc nie mogę za bardzo szaleć)
to pseudokod, więc nie mogę za bardzo szaleć
Mozesz definiowac funkcje
tylko jak ten rozpisany mod zapisać jako warunek if bez tworzenia nowej funkcji?
Nie da się. A co do kodu, można też rekurencyjnie:
def modulo(m n):
if n <= m:
return modulo(m - n, n)
else:
return m
(to pseudokod, więc nie mogę za bardzo szaleć)
Wręcz przeciwnie - pseudokod wszystko skompiluje.