最近在面試某大廠,跪在了最後一面技術面上。面試官要求帶電腦,並在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標記。...