Potęgowanie do najwyższej wartości.

Potęgowanie do najwyższej wartości.
P9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gdynia
  • Postów: 43
0

Witam.
Piszę kalkulator dec-> hex. Mam pewną zmienną $a i muszę ją podzielić przez potęgi liczby 16. Od najwyższej możliwej poprzez coraz niższe. Jak mam ustalić, która potęga jest najbliższa zmiennej, a jak następnie zjeżdżać coraz niżej ?

EDIT: Poprawiłem błędy, które zostały zaznaczone przez furious programming.

cPlusPlus
  • Rejestracja: dni
  • Ostatnio: dni
  • Postów: 99
0

Mówisz, że robisz konwerter dec->hex. Nie łatwiej ci będzie skorzystać z gotowej funkcji? http://php.net/manual/en/function.dechex.php

_13th_Dragon
  • Rejestracja: dni
  • Ostatnio: dni
0

A nie możesz:

  1. wziąć resztę z dzielenia $a przez 16 i zapisać jako kolejną cyfrę od końca
  2. podzielić $a przez 16
  3. jeżeli $a nie jest zerem to przejść do punktu 1.
    ?
  • Rejestracja: dni
  • Ostatnio: dni
1

wracając do konkretnego pytania i zakładając że autor chce się czegoś nauczyć

żeby wyznaczyć najwyższą możliwą potęgę wystarczy użyć logarytmu n-tego stopnia, lub korzystając ze wzoru - logarytmu dowolnego stopnia z liczby przez logarytm dowolnego stopnia z podstawy
otrzymaną liczbę wystarczy zaokrąglić w dół, czyli:

Kopiuj
$najwyzsza_potega = floor(log($liczba) / log(16));

zapomniałem że php akurat umożliwia podanie podstawy logarytmu - w takim przypadku wystarczy:

Kopiuj
$najwyzsza = floor(log($a, 16));

poprzedni kod jest dobry dla innych języków programowania z których nie wszystkie mają funkcje do liczenia logarytmu o dowolnej podstawie

oczywiście w tym konkretnym przypadku jeszcze lepiej użyć po prostu funkcji dechex ;)

połączenie postów - furious programming

P9
  • Rejestracja: dni
  • Ostatnio: dni
  • Lokalizacja: Gdynia
  • Postów: 43
0

Stworzyłem już to potęgowanie do najwyższej możliwej potęgi mniejsze od wpisanej.

Kopiuj
 $x=$oblicz;
$y = 1;


while($y<$x){
$y *=16; 
 }
$y/=16;

Zarejestruj się i dołącz do największej społeczności programistów w Polsce.

Otrzymaj wsparcie, dziel się wiedzą i rozwijaj swoje umiejętności z najlepszymi.