開發平台(Platform): (Ex: VC++, GCC, Linux, ...)
GCC
額外使用到的函數庫(Library Used): (Ex: OpenGL, ...)
問題(Question):
Q1. 不使用乘法如何有效率計算 X*Y 的結果
Q2. 已知兩個array,裡面的元素都已經是排序好的順序,不使用
教科書裡面的經典的排序方法(如:quick sort, merge sort 等)
把兩個array裡面的所有元素合併到另外一個新的array內
所有元素也是排序後的順序
餵入的資料(Input):
Q1. X, Y 兩個整數,不需考慮overflow的問題
Q2. A[] = {1,3,4}, B[]={2,5,7},二者都可能是動態大小的資料量
預期的正確結果(Expected Output):
Q1. 達成正常乘法的效果,但是用更有效率的方法
Q2. C[] = {1,2,3,4,5,7}
錯誤結果(Wrong Output):
N/A
程式碼(Code):(請善用置底文網頁, 記得排版)
抱歉,程式能力不好,想來這邊請教"想法"就好
Q1. 我有兩個想法
法1. X*Y = X + X + ...+ X,自加Y次,所以可以用一個簡單迴圈配合加法完成
法2. 把Y轉成2進位表示,例如 3*12 = 3*(1100) = 3<<3 + 3<<2
所以可以用mask的方式知道Y裡面有那幾個bit是1,便可以對X做位移後加法
不過直接寫起來,code似乎又臭又長 -_-,且如果遇到負數的話不知是否適用?
請益是否有更聰明的方法
Q2. 我起先想到的是空桶排序,設計一個空的array,size = A B array中元素的最大值
例如: X[7]={0}
然後把兩個array裡面每一個元素放到值所相對應的位置
即 X[a[i]] = a[i]; X[b[j]] = b[j];
全部都放好後,把X裡面非0的元素取出來就會是排好的結果
但是,一想完之後發現缺點百出 -_-
1. 如果A B array裡面有0值的元素,這個想法就gg
2. 如果A Barray裡面有重複值的元素,這樣排可能會出錯
補充說明(Supplement):
希望各位大大提供想法即可
如果違反版規,不適合在此發問的話請不吝告知,感謝 ^^