[代码]仅用以为和加法实现乘法
序:同学去沈阳参加广州周立功单片机发展有限公司的笔试带回来的一道题,感觉挺有意思,昨晚睡前想好了算法,现在把代码写出来,并稍微测试了一下。
说明:
当前仅考虑无符号整型,如果是有符号的话,则多考虑最高位的情况而已,现在只是因为前几天做了一个高低位互换的例子(整个过程用的都是无符号整型),所以现在干脆也先考虑无符号整型的情况而已了。
代码:
// a:被乘数,b:乘数
unsigned int Multiply(unsigned int a, unsigned int b)
{
unsigned int result = 0;
// 通过移位的方法获得第i位的数值(1 or 0)
for(int i=1; i<=32; i++) {
unsigned int bit = b;
bit = bit<< 32-i;
bit = bit>>31;
if(0==bit) continue;
unsigned int temp = a;
for(int n=1; n<i; n++) {
temp = temp << 1;
}
result += temp;
}
return result;
}
int main(){
for(int i=0; i<20; i++){
for(int j=0; j<20; j++){
printf("%d*%d=%d\n",i,j,Multiply(i,j));
}
}
}
unsigned int Multiply(unsigned int a, unsigned int b)
{
unsigned int result = 0;
// 通过移位的方法获得第i位的数值(1 or 0)
for(int i=1; i<=32; i++) {
unsigned int bit = b;
bit = bit<< 32-i;
bit = bit>>31;
if(0==bit) continue;
unsigned int temp = a;
for(int n=1; n<i; n++) {
temp = temp << 1;
}
result += temp;
}
return result;
}
int main(){
for(int i=0; i<20; i++){
for(int j=0; j<20; j++){
printf("%d*%d=%d\n",i,j,Multiply(i,j));
}
}
}

浙公网安备 33010602011771号