• 《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
    ", res);
    108     }
    109     
    110     return 0;
    111 }
  • 相关阅读:
    spring3: Bean的命名与Bean的实例化
    极客软件测试52讲总结分享
    如何有效地搭建测试环境?
    用xshell 连接docker Linux服务器
    python+requests+excel+unittest+ddt接口自动化数据驱动并生成html报告
    CI持续集成系统环境--Gitlab+Gerrit+Jenkins完整对接
    jenkins 关联 钉钉机器人
    Jenkins pipeline 语法详解
    jenkins 添加 证书凭证Credentials
    项目中使用的S2SH整合中使用的struts.xml(参考模板)
  • 原文地址:https://www.cnblogs.com/zhuli19901106/p/3612771.html
Copyright © 2020-2023  润新知