听同学百度二面中,不准用四则运算操作符来实现四则运算。一想就想到了计算机组成原理上学过的。
暂时没写除法,过一会补上。
#include <iostream>
using namespace std;
/*
int add(int a, int b)
{//按位累加,慢,奇慢无比,hdu1000都过不了
int c = 0;
int flag = 0;
int x = 1;
while((a>=x) || (b>=x) || flag){
c = c | ((a&x) ^ (b&x) ^ flag);
if(((a&x) & (b&x)) || ((a&x) & flag) || (flag & (b&x)))
flag = (x<<1);
else
flag = 0;
x = (x<<1);
}
return c;
}*/
int add(int a, int b)
{
int t;
while(b){//直到没有进位
t = a^b;//不带进位加法
b = ((a&b)<<1);//进位
a = t;
}
return a;
}
int negtive(int a)
{
return add(~a, 1);
}
int sub(int a, int b){
return add(a, negtive(b));
}
int multiply(int a,int b)
{
int ans = 0;
while(b){
if(b&1)
ans = add(ans, a);
a = (a<<1);
b = (b>>1);
}
return ans;
}
int main()
{
int a, b;
while(scanf("%d %d", &a, &b) != EOF){
printf("%d\n", multiply(a,b));
}
return 0;
}