减法:a-b = a + (-b)
乘法:a*b相当于将a累加abs(b)次
除法:相当于将abs(a)减去-abs(b) 的次数
//求lhs的反面值rhs,即求rhs使得lhs + rhs = 0
int Negate(int lhs)
{
int step = (lhs>0)?-1:1, ret = 0;
while(lhs != 0)
{
lhs += step;
ret += step;
}
return ret;
}
int Abs(int lhs)//返回i的绝对值
{
if(lhs < 0) return Negate(lhs);
return lhs;
}
//lhs - rhs = lhs + (-rhs)
int Subtract(int lhs, int rhs)
{
return lhs + Negate(rhs);
}
int Multiply(int lhs, int rhs)
{
if(Abs(lhs) < Abs(rhs)) return Multiply(rhs, lhs);
int ret = 0;
for(int i = Abs(rhs); i>0; --i) ret += lhs;
return (rhs<0)?Negate(ret):ret;
}
//lhs, rhs符号不同
bool Diff(int lhs, int rhs)
{
return (lhs<0&&rhs>0) || (lhs>0&&rhs<0);
}
int Division(int lhs, int rhs)
{
if(rhs == 0)//防止除0
{
perror("Devide 0.");
exit(1);
}
int step = (rhs>0)?Negate(rhs):rhs;
int ret = 0;
for(int sum=Abs(lhs); sum+rhs>=0; sum+=rhs)
++ret;
return Diff(lhs,rhs)?Negate(ret):ret;
}
简单测试:
int a = 13,b = -5;
cout<<"a = "<<a<<"\tb = "<<b<<endl;
cout<<"Subtract(a,b) = "<<Subtract(a, b)<<endl;
cout<<"Multiply(a,b) = "<<Multiply(a, b)<<endl;
cout<<"Division(a,b) = "<<Division(a, b)<<endl;