<?php
class BigInteger
{
public static function add ($a, $b)
{
$al = strlen($a);
$bl = strlen($b);
// 取最大的數值長度
$len = $al > $bl ? $al : $bl;
for ($i = 0; $i < $len; $i ++) {
// 將每個位數相加,並放入陣列內
$c[$i] += $a[$al - $i - 1] + $b[$bl - $i - 1];
if ($c[$i] >= 10) { // 當資料大於10的時候,作一下數字處理
$c[$i + 1] += 1; // 上一位數進位 + 1
$c[$i] = $c[$i] % 10; // 本位數取個位數
}
}
return strrev(implode("", $c));
}
}
// BC Math 驗證
$a = "391283198283172381723898213";
$b = "7890123456789012345623423";
echo "BC Math => ".bcadd($a, $b);
echo "\r\n";
echo "BigInteger => ".BigInteger::add($a, $b);
?>
結果:
BC Math => 399173321739961394069521636
BigInteger => 399173321739961394069521636
這樣整個運算,最大的位數就是看程式語言支援的陣列可儲存的大小了。
沒有留言:
張貼留言
我的意見