只用+操作实现 -,*,/操作

来源:互联网 发布:tvb电视剧播放软件 编辑:程序博客网 时间:2024/04/27 11:20

减法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;

原创粉丝点击