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

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 运维知识 > linux >内容正文

linux

linux编译两个整数相加,常考面试题之两个字符串相加(长整数相加)

發布時間:2025/5/22 linux 32 豆豆
生活随笔 收集整理的這篇文章主要介紹了 linux编译两个整数相加,常考面试题之两个字符串相加(长整数相加) 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

無論你面試的是什么崗位,應該都或多或少看到過這個問題 - 兩個長整數相加要怎么實現。如果a和b的位數不大,確實直接用類型轉換就可以求出a+b了,但是萬一a和b的位數都是幾百位呢,早就溢出了,這時候要怎么計算呢?

這種情況下,有三種解決方法可供選擇:

一、 用字符串來存儲a和b的值;

二、 用數組來存儲a和b的值;

三、 用鏈表來存儲a和b的值。

這三種方法都有一個共同點,就是無論哪一種方法,都可以不用擔心因為數字太大而造成數值溢出出錯。而它們的解決思路也都大同小異,下面我們來分析解決思路。

做這種題的時候,我有一個慣性思維,就是用我們現實中的解題思路來教給計算機,讓它也用這種方法來解決。回憶一下我們小學的時候,老師是不是教我們做加法的時候,要從最后一位開始加,遇到十的時候就要進行進位,直至兩個數都加完。在編程中,我們也可以用這個思路來進行做題:

先找到a和b的最后一位,將這兩個一位數相加并假設它存在tmp中,如果tmp大于9,那么就說明需要進位了,這時候加入一個標識表示是否需要進位,比如說我們拿addOne作為標識,那么這時候我們就需要將addOne置為1,然后tmp對10進行取模,就可以得到當前位置上的實際數值了,再對a和b的倒數第二位進行重復的操作...直至將a和b遍歷完就結束。下面這段代碼是用第二種方法來解決的,大家可以參考一下:

1 //方法二:將數字轉化為數組再進行相加

2 functionadd(num1, num2){3 //將num1和num2轉為數組,每格存儲一位,比如num1 = “12345”,轉成數組a之后就變成["1", "2", "3", "4", "5"]

4 let a = String.prototype.split.call(num1, "");5 let b = String.prototype.split.call(num2, "");6 //用來存儲結果

7 let res =[];8 let addOne = 0; //用于判斷是否需要金威

9 //當a和b其中一個不為空時,各取出最后一位數字并相加,如果其中一個先為空了,則將它置為0

10 while(a.length ||b.length){11 let item1 = parseInt(a.pop()) | 0;12 let item2 = parseInt(b.pop()) | 0;13 let tmp = item1 + item2 +addOne;14 if(tmp > 9){15 addOne = 1;16 tmp %= 10;17 }else{18 addOne = 0;19 }20 //unshift是js中的一個操作方法,array.unshift(item)表示在數組array的最前面插入item

21 res.unshift(tmp)22 }23 //當a和b都全部加完了之后,再最后一次判斷是否需要進位

24 if(addOne) res.unshift(1);25 //最后利用join把數組轉成字符串并返回

26 return res.join('');27 }

其他兩種方法做起來也都大同小異,思路是一樣的,只不過是實際操作起來的方法會有所不同,大家可以自己探索一下。

總結

以上是生活随笔為你收集整理的linux编译两个整数相加,常考面试题之两个字符串相加(长整数相加)的全部內容,希望文章能夠幫你解決所遇到的問題。

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