同样是面试题,记录下我的做法。
<?php
function randNumber($length) {
$str = null;
$strPol = '0123456789';
$max = strlen($strPol) - 1;
for($i=0; $i < $length; $i++){
$str .= $strPol[rand(0, $max)]; //rand($min,$max)生成介于min和max两个数之间的一个随机整数
}
return $str;
}
function addition4OneHundred($param1, $param2) {
$lenParam1 = strlen($param1);
$lenParam2 = strlen($param2);
if ($lenParam1 >= $lenParam2) {
$largeNum = $param1;
$largeLen = $lenParam1;
$smallNum = $param2;
$smallLen = $lenParam2;
} else {
$largeNum = $param2;
$largeLen = $lenParam2;
$smallNum = $param1;
$smallLen = $lenParam1;
}
$carryNum = $modNum = 0;
$i = $largeLen - 1;
$j = $smallLen - 1;
for (; $i >= 0; $i--, $j--) {
$addend = $j < 0 ? 0 : intval($smallNum[$j]);
$sum = intval($largeNum[$i]) + $addend + $carryNum;
$modNum = $sum % 10;
$carryNum = $sum != $modNum ? 1 : 0;
$result = $modNum . $result;
if ($i == 0 && $carryNum) {
$result = $carryNum . $result;
}
}
return $result;
}
$number1 = randNumber(100);
$number2 = randNumber(100);
// $number1 = '90000000001';
// $number2 = '9999999999';
$answer = addition4OneHundred($number1, $number2);
echo $number1 . ' + ' . $number2 . ' = ' . $answer;