我在其中一个网站上看到一个 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");
}
?