2 - 1,可以看做2 + (-1),那么两数a和b相减,就是a加上取反后的b(也就是改变符号位)
继续,两数a和b相乘就是b个a连加
那么两数相除呢?这似乎有点难,如果a/b = c, 那么a是c个b连加的结果,可将b连加直到小于等于a,连加的次数即为商
public class arithmetic {
public static int negate(int b) {
int neg = 0;
int d = b < 0 ? 1 : -1;
while(b != 0) {
neg += d;
b += d;
}
return neg;
}
public static int minus(int a, int b) {
return a + negate(b);
}
public static int multiply(int a, int b) {
if (a < b) {
return multiply(b, a);
}
int sum = 0;
for (int i = abs(b); i > 0; i--) {
sum += a;
}
return sum;
}
public static int abs(int a) {
if (a < 0) {
return negate(a);
}
else {
return a;
}
}
public int divide(int a, int b) {
throws java.lang.ArithmeticException {
if (0 == b) {
throw new java.lang.ArithmeticException("ERROR");
}
int absa = abs(a);
int absb = abs(b);
int product = 0;
int x = 0;
while( product + absb <= absa) {
product += absb;
x++;
}
if( (a < 0 && b < 0) || (a > 0 && b > 0) ) {
return x;
}
else {
return negate(x);
}
}
}
}