算法系列 -- 两个长整形字符串相加

前两天出去面试被问到了这个一个问题:将两个长度很长的整形字符串相加输出,字符串的长度操作系统能够表示的整形的最大长度。废话少说,直接上PHP代码。

<?php

$str1 = '1231423423423423';
$str2 = '333332342342342342333';
$final = '';
$maxleng = (strlen($str1) > strlen($str2) ? strlen($str1) : strlen($str2)) + 1; //字符串的最大长度 + 1 ,因为可能会产生一个进位

$strArr = getZeroStr($str1, $str2);
$strArr1 = $strArr[0];
$strArr2 = $strArr[1];

$finaArr = array();
for ($i = $maxleng - 1 ; $i > 0; $i--) {
	$temp = intval($strArr1[$i]) + intval($strArr2[$i]);
	$finaArr[$i] += $temp % 10;
	$finaArr[$i - 1] += intval($temp / 10);
}

$finaArr = array_reverse($finaArr);
$finaStr = '';
foreach($finaArr as $item) {
	$finaStr .= $item;
}

echo substr($finaStr, 0, 1) == '0' ? substr($finaStr, 1) : $finaStr;

function getZeroStr($str1, $str2) {
	$len1 = strlen($str1);
	$len2 = strlen($str2);
	$sublen = ($len1 > $len2 ? $len1 - $len2 : $len2 - $len1) + 1;
	if($len1 > $len2) {
		$str2 = str_repeat('0',$sublen) . $str2;
		$str1 = '0' . $str1;
	} else if($len2 > $len1){
		$str1 = str_repeat('0',$sublen) . $str1;
		$str2 = '0' . $str2;
	}
	$strArr1 = str_split($str1);
	$strArr2 = str_split($str2);
	return array($strArr1, $strArr2);
}

 

点赞