【发布时间】:2013-02-13 14:11:34
【问题描述】:
我在其中一个网站上看到一个 C 语言面试问题,要求你编写一个函数,该函数获取 2 个整数、num 和 times,并在不使用 * 运算符的情况下将它们相乘,这意味着主要使用左移和右移。我想出了一个可行的答案(除非有人发现了一个错误),但是有没有人有更好的方法在更好的时间或内存消耗中解决它?
这是我写的:
#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");
}
?
【问题讨论】:
-
在这里可能会得到更好的答案:codereview.stackexchange.com
-
我同意 fire.eagle。顺便说一句,这 ->
if((num & times)==0)应该是if((num && times)==0) -
@BinyaminSharet 不,应该是
if ((num | times) == 0)。 -
@H2CO3 - 我认为两者都可以(虽然你的更漂亮:))
标签: c