Skip to content

Instantly share code, notes, and snippets.

@qti3e
Last active January 23, 2016 19:42
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save qti3e/62f2e6f6cec4725ecd1a to your computer and use it in GitHub Desktop.
Save qti3e/62f2e6f6cec4725ecd1a to your computer and use it in GitHub Desktop.
Sum tow very very big number in php(ex:999999999999999999999999999999999999+999999999999999999999999999999999999)
<?php
/**
* Sum tow very big number
* @param $n1
* @param $n2
* @return string
*/
function big_sum($n1,$n2)
{
if(strlen($n1) > strlen($n2)){
//small number
$m1 = $n2;
//big number
$m2 = $n1;
}else{
//small number
$m1 = $n1;
//big number
$m2 = $n2;
}
$m1 = str_repeat(0,(strlen($m2) - strlen($m1))).$m1;
$len = strlen($m1)-1;
$re = "";
$plus = 0;
for($i = $len;$i >= 0;$i--){
$n1 = (int)$m1[$i];
$n2 = (int)$m2[$i];
$s = $n1 + $n2 + $plus;
if($s >= 10){
$re = substr($s,strlen($s)-1,strlen($s)).$re;
$plus = (int)substr($s,0,strlen($s)-1);
}else{
$re = $s.$re;
$plus = 0;
}
}
return (($plus == 0) ? "" : $plus).$re;
}
/**
* @param $n1
* @param $n2
* @return mixed
*/
function big_multiplication($n1,$n2)
{
if(strlen($n1) > strlen($n2)){
//small number
$m1 = $n2;
//big number
$m2 = $n1;
}else{
//small number
$m1 = $n1;
//big number
$m2 = $n2;
}
$re = $m2;
for($i = 1;$i < $m1;$i++){
$re = big_sum($m2,$re);
}
return $re;
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment