За последние 24 часа нас посетили 20403 программиста и 1089 роботов. Сейчас ищет 861 программист ...

Помогите: перевести десятичное число в шестнадцатеричное

Тема в разделе "Сделайте за меня", создана пользователем zerosoul, 9 июн 2018.

  1. zerosoul

    zerosoul Активный пользователь

    С нами с:
    15 май 2012
    Сообщения:
    12
    Симпатии:
    0
    Добрый день!
    У меня есть число 0,618033988749894848204586834365638117720309179805762862135448622705260
    Вот такое большое и exel с ним не справляется и как я понял стандартные функции php тоже. В PHP не силен поэтому прошу вашей помощи.
     
  2. Sail

    Sail Старожил

    С нами с:
    1 ноя 2016
    Сообщения:
    1.591
    Симпатии:
    360
  3. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.410
    Симпатии:
    1.768
    и что ты хочешь с ним потом делать?
     
  4. nospiou

    nospiou Старожил

    С нами с:
    4 фев 2018
    Сообщения:
    3.400
    Симпатии:
    510
    ни копейки врагам
     
  5. username

    username Новичок

    С нами с:
    6 июл 2017
    Сообщения:
    225
    Симпатии:
    17
    php скрипт перевода целой и дробной части числа из десятичной в шестнадцатиричную систему счисления по алгоритму предложенному пользователем Sail

    PHP:
    1. $c = "0.618033988749894848204586834365638117720309179805762862135448622705260";
    2. $cm=explode(".",$c);
    3. $cc=$cm[0];
    4. $cd=$cm[1];
    5. $mz=array();
    6. while (1) {
    7. $d = floor($cc/16);
    8. $o = $cc % 16;
    9. $mz[] = $o;
    10. if ($o==0) break;
    11. }
    12. // функция вывода букв для 16-ричного числа
    13. function to16($e) {
    14.   if ($e<10) return $e;
    15. switch ($e) {
    16. case 10: $m = 'A'; break;
    17. case 11: $m = 'B'; break;
    18. case 12: $m = 'C'; break;
    19. case 13: $m = 'D'; break;
    20. case 14: $m = 'E'; break;
    21. case 15: $m = 'F'; break;
    22. }
    23.   if (isset($m)) return $m;
    24.   //var_dump($e);
    25. }
    26. while (count($mz)) echo to16(array_pop($mz));
    27. echo ".";
    28. $mz=array(0=>0);
    29. $mzd = strlen($cd);
    30.  
    31. for ($i=0;$i<$mzd;$i++) {
    32. $mz[$i+1] = intval(substr($cd,$i,1));
    33. }
    34. //var_dump($mz);
    35.  
    36. // поэлементное умножение на 16
    37. while ($mzd>0) {
    38. // перебор всех элементов с целью умножения на 16
    39. for ($i=0;$i<$mzd;$i++) {
    40. $mz[$i] = $mz[$i]*16;
    41. }
    42. // перебор всех элементов с целью переброса больших разрядов вверх
    43. for ($i=$mzd;$i>0;$i--) {
    44.   if ($mz[$i]>10) { $c = floor($mz[$i]/10); $mz[$i-1] += $c; $mz[$i] = $mz[$i]%10; }
    45. }
    46. echo to16($mz[0]);
    47.   $mz[0] = 0;
    48.   $mzd--;
    49. }