Сложить два целых неотрицательных числа (длинная арифметика)

2 августа 2021
Код на PHP:
<?
/**
 * Складывает два целых неотрицательных числа
 * @param string $num1 - число 1
 * @param string $num2 - число 2
 * @return string
 */
function sum_long($num1, $num2)
{
	$r = '';

	$s_max = $num1;
	$s_min = $num2;
	if(strlen($num1)<strlen($num2))
	{
		$s_max = $num2;
		$s_min = $num1;
	}

	$s_max = strrev($s_max);
	$s_min = strrev($s_min);

	$len_max = strlen($s_max);
	$len_min = strlen($s_min);

	$add = 0;
   	for($i=0; $i<$len_max; $i++)
	{
		$sum = (int)$s_max[$i] + (int)$s_min[$i] + $add;
		$a = $sum % 10;
		$r = $a.$r;

		$add = 0;
		if($sum>=10) $add = 1;
		if($add>0 && $i+1 == $len_max) $r = '1'.$r;
	}

	if($r=='') $r = '0';

	return $r;
}

$a = sum_long('555555555555555555555555555555555555555555555555', '111');
echo $a; //выведет '555555555555555555555555555555555555555555555666'
?>