日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

java两个很大的数相加_两个超大数的相加

發布時間:2024/10/14 编程问答 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 java两个很大的数相加_两个超大数的相加 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

兩個超大數的相加,主要是判斷進一的情況,另外int型有邊界限制,所以轉換成字符串型進行處理。

/**

* @description 兩個超大的數字相加

* @param $numA string 第一個大數

* @param $numB string 第二個大數

* @return string 兩個大數之和

**/

function largeNumberAdding(string $numA, string $numB) {

//邊界校驗

if (empty($numA)) {

if (empty($numB)) {

return '0';

} else {

return $numB;

}

} else {

if (empty($numB)) {

return $numA;

}

}

$result = $tmpRes = $head = $tmpHead = '';

$lenA = strlen($numA);

$lenB = strlen($numB);

$revA = strrev($numA);

$revB = strrev($numB);

$common = min($lenA, $lenB);

//截取超出部分長度

$tmpHead = ($lenA > $lenB) ? substr($revA, $common) : substr($revB, $common);

//是否進一

$addOne = false;

//重疊部分處理

for ($i=0; $i

$tmp = (int)$revA[$i] + (int)$revB[$i];

$addOne && $tmp += 1;

$tmpRes .= (string)($tmp % 10);

$addOne = ($tmp >= 10) ? true : false;

}

//頭部處理

if ($addOne) {

if ($tmpHead) {

$headlen = strlen($tmpHead);

for ($j=0; $j

$tmp = (int)$tmpHead[$j];

if ($addOne) {

$tmp += 1;

$tmpRes .= (string)($tmp % 10);

$addOne = ($tmp >= 10) ? true : false;

} else {

$tmpRes .= (string)$tmp;

}

}

}

//相同位數進一直接+1

$addOne && $tmpRes .= '1';

} else {

$tmpRes .= $tmpHead;

}

//將結果倒轉

$result = strrev($tmpRes);

return $result;

}

$a = '988881111111110000000000000000000';

$b = '10002222222222';

$res = largeNumberAdding($a, $b);

var_dump($res);

輸出結果:

string(33) "988881111111110000010002222222222"

時間復雜度: O(n)

思考:

1, 這里的超大數默認為正整數,沒有支持負數或浮點數,需要優化;

與50位技術專家面對面20年技術見證,附贈技術全景圖

總結

以上是生活随笔為你收集整理的java两个很大的数相加_两个超大数的相加的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。