fork download
  1. <?php
  2. class MyClass{
  3. function bin2dec($bin)
  4. {
  5. $length = count($bin) - 1;
  6. $sum = 0;
  7. //convert using doubling
  8. for($i = 0; $i < $length; $i++)
  9. {
  10. //use string_add if doubling bigger than int32
  11. if($i >= 16)
  12. {
  13. $double = $this->string_add("$sum", "$sum");
  14. $cr = $bin[$i];
  15. if($cr == 0)
  16. {
  17. $sum = $this->string_add($sum, $double);
  18. }
  19. else{
  20. return $i;
  21. $add = $this->string_add($double, "$cr");
  22. $sum = $this->string_add($sum, $add);
  23. }
  24. }
  25. else{
  26. $sum += ($sum * 2) + $bin[$i];
  27. }
  28. }
  29. return $sum;
  30. }
  31.  
  32. function string_add($a, $b)
  33. {
  34. $lena = strlen($a); $lenb = strlen($b);
  35. if($lena == $lenb)
  36. {
  37. $len = $lena - 1;//any
  38. }
  39. else if($lena > $lenb)
  40. {
  41. $b = str_pad($b, $lena, "0", STR_PAD_LEFT);
  42. $len = $lena - 1;
  43. }
  44. else if($lenb > $lena){
  45. $a = str_pad($a, $lenb, "0", STR_PAD_RIGHT);
  46. $len = $lenb - 1;
  47. }
  48. $result = "";
  49. for ($i = $len, $carry = 0; $i >= 0 || $carry != 0; $i--)
  50. {
  51. $add1 = $i < 0 ? 0 : $a[$i];
  52. $add2 = $i < 0 ? 0 : $b[$i];
  53. $add = $add1 + $add2 + $carry;
  54. if ($add > 9) {
  55. $carry = 1;
  56. $add -= 10;
  57. }
  58. else {
  59. $carry = 0;
  60. }
  61. $result .= $add;
  62. }
  63. return strrev($result);
  64. }
  65. }
  66.  
  67. $man = new MyClass();
  68. $arr = array_pad(array(1), 62, 0);
  69. $dec = $man->bin2dec($arr);
  70. echo $dec;
Success #stdin #stdout 0.01s 20520KB
stdin
Standard input is empty
stdout
118534269812248282176546132235124736