《Cracking the Coding Interview》——第7章:数学和概率论——题目4

2014-03-20 02:16

题目:只用加法和赋值,实现减法、乘法、除法。

解法:我只实现了整数范围内的。减法就是加上相反数。乘法就是连着加上很多个。除法就是减到不能减为止,数数总共减了多少个。

代码:

  1 // 7.4 Implement the -*/ function with only the + operator.

  2 // You cannot use bit operation, although you might want it for efficiency.

  3 #include <cstdio>

  4 using namespace std;

  5 

  6 int negate(int n)

  7 {

  8     int one = (n >= 0 ? -1 : 1);

  9     int res = 0;

 10     

 11     while (n != 0) {

 12         n += one;

 13         res += one;

 14     }

 15     

 16     return res;

 17 }

 18 

 19 int add(int x, int y)

 20 {

 21     return x + y;

 22 }

 23 

 24 int subtract(int x, int y)

 25 {

 26     return x + negate(y);

 27 }

 28 

 29 int multiply(int x, int y)

 30 {

 31     int res = 0;

 32     int value = (x >= 0 ? y : negate(y));

 33     int one = (x >= 0 ? -1 : 1);

 34     

 35     while (x != 0) {

 36         res += value;

 37         x += one;

 38     }

 39     

 40     return res;

 41 }

 42 

 43 int divide(int x, int y)

 44 {

 45     if (y == 0) {

 46         return 0;

 47     }

 48     if (x == 0) {

 49         return 0;

 50     }

 51     

 52     int res = 0;

 53     int one = 1;

 54     int negone = -1;

 55     int negy = negate(y);

 56     

 57     if (x > 0) {

 58         if (y > 0) {

 59             while (x >= y) {

 60                 x += negy;

 61                 res += one;

 62             }

 63         } else {

 64             while (x >= negy) {

 65                 x += y;

 66                 res += negone;

 67             }

 68         }

 69     } else {

 70         if (y > 0) {

 71             while (x <= negy) {

 72                 x += y;

 73                 res += negone;

 74             }

 75         } else {

 76             while (x <= y) {

 77                 x += negy;

 78                 res += one;

 79             }

 80         }

 81     }

 82     

 83     return res;

 84 }

 85 

 86 int main()

 87 {

 88     char s[10];

 89     int a, b;

 90     int res;

 91     

 92     while (scanf("%d%s%d", &a, s, &b) == 3) {

 93         switch (s[0]) {

 94         case '+':

 95             res = add(a, b);

 96             break;

 97         case '-':

 98             res = subtract(a, b);

 99             break;

100         case '*':

101             res = multiply(a, b);

102             break;

103         case '/':

104             res = divide(a, b);

105             break;

106         }

107         printf("%d\n", res);

108     }

109     

110     return 0;

111 }

 

你可能感兴趣的:(interview)