<? //功能:计算N位大数相乘的结果 function N_num_multiplication($num1, $num2) { //乘法函数,输入两数值,输出阵列元素0为乘积个位,阵列元素1为乘积十位 function Multiplication(&$a, &$b) { $c = $a*$b; Return array($c%10, floor($c/10)); } //加法函数,输入乘积个位或十位与$product阵列元素相加,如有进位则递回 function Addition(&$a, &$arr, $index) { $c = $a+$arr[$index]; if ($c>9) { $arr[$index] = $c%10; Addition(floor($c/10),$arr,$index+1); } else { $arr[$index] = $c; } } //先判断输入数值是否为数值字串 if (!is_numeric($num1) || !is_string($num1)) Return false; if (!is_numeric($num2) || !is_string($num2)) Return false; //将数值字串分割为阵列 $num1 = preg_split('//', $num1,-1, PREG_SPLIT_NO_EMPTY); $num2 = preg_split('//', $num2,-1, PREG_SPLIT_NO_EMPTY); //处理负数 if ($num1[0]=='-') { $negative++; array_shift($num1); } else { $negative = 0; } if ($num2[0]=='-') { $negative++; array_shift($num2); } //将阵列反转以方便运算 $num1 = array_reverse($num1); $num2 = array_reverse($num2); //开始计算结果 for ( $i=0; $i<count($num2); $i++ ) { for ( $j=0; $j<count($num1); $j++ ) { $num3 = Multiplication($num1[$j], $num2[$i]); Addition($num3[0], $product, $i+$j); Addition($num3[1], $product, $i+$j+1); } } //计算完将阵列反转并输出 $product = array_reverse($product); Return ($negative%2?'-':'').implode('', $product); } //示范 //12345678910111213141516171819202122232425×888888888888888888888888888888=??? $result = N_num_multiplication('12345678910111213141516171819202122232425', '888888888888888888888888888888'); if ($result) { echo $result; } else { echo "error"; } ?> 运行结果: 10973936808987745014681041617057579158679901143874207847271820335793400