开发平台(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):
希望各位大大提供想法即可
如果违反版规,不适合在此发问的话请不吝告知,感谢 ^^