一天一道演算法題 兩個字串相乘

2022-08-05 09:24:21 字數 1234 閱讀 3140

最近在面試某大廠,跪在了最後一面技術面上。面試官要求帶電腦,並在40分鐘內當場完成一道題並要求跑通。

題目是兩個數字字串相乘,得出的結果也用字串輸出。例如給string a = "123", string b = "456",求出結果字串。

回來仔細思考了一下,並在1小時內完成了這道題。

思路如下:

要計算123 * 456,可以模擬我們自己在進行乘法運算的過程,先計算6 * 123 = 738, 再計算5*123 = 615, 再計算4*123 = 492。

最後再對三個字串做移位相加。移位就是在後面補零。如果字串還不相等,就在前面補0,知道兩個字串長度相等,再進行相加操作。

**如下:

#include#include

using

namespace

std;

//單個字元與字串相乘的結果

string multiply(string a, char

b)

if(i1!=0

) res = char(i1 + '

0') +res;

return

res;}//

兩個字串錯位相加

string add(string a, string b, int

b_shift)

else

if(diff<0

)

}int len =a.size();

intcurrent;

int temp = 0

;

int i0 = 0, i1 = 1

;

for(int i=len-1;i>=0;i--)

if(i1>0

) res = char(i1 + '

0') +res;

return

res;}//

兩個字串相乘

string multiply(string a, string

b)

return

res;

}int

main()

其實題目本身並不難,說面試時緊張也好,同時平時編碼少,說缺乏熟練度也好,總之跪在了最後一面。

非常遺憾,今後仍需要加強編碼。

兩個字串相乘

先附上一張演算法圖 解釋 123 456 首先拿出1和456相乘,儲存到陣列1 2 3 的位置,然後拿出2和456相乘2 3 4的位置,依次類推,直到第乙個字串遍歷完 然後將他們相加,依次存到陣列中 實現如下 int j 0 int resindex 0 for int i 0 i然後再考慮進製,需...

一天一道演算法題 樹狀陣列

題目 模板 樹狀陣列1 樹狀陣列和線段樹差不多,可以處理區間操作,但是處理不了太複雜的區間問題。不過 比線段樹簡潔很多很多!時間複雜度都為o logn 例如,區間 1,8 儲存方式如下 1 tree 1 num 1 001 001 2 tree 2 num 2 num 1 010 010 001 3...

一天一道演算法題 線段樹

題目 模板 線段樹1 rmq問題 range minimum maximum query 和求區間和的問題可以用暴力法做,時間複雜度為o n 2 用在本題會超時,所以我們選擇線段樹做。線段樹是一種用於區間操作的資料結構,用二叉樹構造。如圖。線段樹的每個節點代表了乙個區間。防止超時,用了lazy標記。...