Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Reszta z dzielenia
Forum PHP.pl > Forum > PHP
ksiadz
Witam

Mam problem z zadaniem ktorego tresc jest nastepujaca: nalezy obliczyc reszte z dzielenia BEZ uzycia operatora modulo przez 97 z zalozeniem ze skrypt operuje na liczbach nie wiekszych niz 16 bitow. Celem zadania jest obliczenie wartosci IBAN czyli liczba dzielona bedzie miala 26 cyfr jezeli dobrze sie orjetuje. Problem polega w tym ze nie wiem jak sobie poradzic bez operatora... moze ktos podac wskazowke?
bela
  1. <?php
  2. function modulo($dzielna, $dzielnik) {
  3. $suma = 0;
  4. while($suma < $dzielna) {
  5. suma += $dzielnik;
  6. }
  7. return $dzielna - $suma;
  8. }
  9. ?>

Tak napisane w minutę. Sprawdź czy działa.
tsharek
Witam,

Nie wiem czy dokładnie o to chodzi, ale resztę można obliczyć poprostu:

x/y=z+r

r=x-floor(x/y)*y

(chyba - mogłem się walnąć ale na prostym przykładzie działa:P)

Może to coś Ci pomoże, chociaż pewnie już dawno na to wpadłeśtongue.gif

Pozdrawiam,
Tsharek
konradk2
ja bym polecał:
  1. <?php
  2.  
  3. function modulo($dzielna, $dzielnik){
  4. while($dzielna >= $dzielnik){
  5. $dzielna -= $dzielnik;
  6. }
  7. return $dzielna;
  8. }
  9.  
  10. ?>


funkcja poprzednika może nie dziłać prawidłowo monieważ pentla while wykona się raz za dużo dla tego sposobu lepiej by było użyć składni do... while
UDAT
Cytat(tsharek @ 2005-12-27 12:30:05)
r=x-floor(x/y)*y


Ten sposób jest dużo szybszy od pętli gdyż ile ta pętla będzie się wykonoywała dla danych np.
97*10^25 ( liczba dzielona bedzie miala 26 cyfr) modulo 2 wykona 10^25 przebiegów i wyjdzie mu zero.

Odradzam pętle.

I jak w 16 bitach zapiszesz 26 cyfr questionmark.gif bo ja nie wiem biggrin.gif --> 2^16=~65536
konradk2
oczywiście to rozwiązanie jest naleprze im krutszy kod tym lepiej tongue.gif
pod warunkiem że łatwo go potem(potem znaczy po np 6miesiącach) przeczytać
tiraeth
bcmod" title="Zobacz w manualu php" target="_manual nie działa?
ksiadz
Cytat
bcmod nie działa?

Zadanie polega na NIE uzywaniu takich funkcji
Cytat
I jak w 16 bitach zapiszesz 26 cyfr questionmark.gif

Dziele cala liczbe na kilka mniejszych wyrazow. Poradzilem sobie dzieki wskazowce tsharek.
ActivePlayer
ksiadz:
Cytat
jezeli dobrze sie orjetuje

konradk2:
Cytat
krutszy


sory za ot.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.