我在其中一个站点看到C语言中的一个采访问题,要求您编写一个函数,该函数可以获得2个整数,num和times,并且可以不使用*运算符来对它们进行乘法运算,这意味着主要使用shift左和右。我想出了一个可行的答案(除非有人发现一个bug),但是有没有人有更好的方法来解决它在更好的时间或内存消耗?无整数乘法*
这里是我写的:
#include <stdio.h>
int multiply_with_shift (int num, int times)
{
int cnt=0;
int org_times=times;
if((num & times)==0)
return 0;
else
{
while(times >1)
{
times= times >> 1;
cnt++;
}
int val= 1;
val= val <<cnt;
int sub= org_times-val;
int res= num << cnt;
for(int i=0 ; i < sub; i++)
{
res+=num;
}
return res;
}
}
void main()
{
int tmp;
tmp=multiply_with_shift(5,15);
printf(" the answer is : %d \n", tmp);
printf("\n");
}
?
可能会在这里得到更好的答案:HTTP ://codereview.stackexchange.com/ – 2013-02-13 14:14:28
我同意fire.eagle。 ((num&times)== 0)'应该是'if((num && times)== 0)' – MByD 2013-02-13 14:15:11
@BinyaminSharet no,它应该是'if((num | times)= = 0)'。 – 2013-02-13 14:22:15