1. 题目

请实现整数数字的乘法、减法和除法运算,运算结果均为整数数字,
程序中只允许使用加法运算符和逻辑运算符,允许程序中出现正负常数,不允许使用位运算。

你的实现应该支持如下操作:

  • Operations() 构造函数
  • minus(a, b) 减法,返回a - b
  • multiply(a, b) 乘法,返回a * b
  • divide(a, b) 除法,返回a / b
示例:
Operations operations = new Operations();
operations.minus(1, 2); //返回-1
operations.multiply(3, 4); //返回12
operations.divide(5, -2); //返回-2提示:
你可以假设函数输入一定是有效的,例如不会出现除法分母为0的情况
单个用例的函数调用次数不会超过1000次

来源:力扣(LeetCode)
链接:https://leetcode-cn.com/problems/operations-lcci
著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。

2. 解题

参考题解:把乘数和除数的 2n2^n2n 倍的结果 存起来,不断的加或者减

class Operations {public:Operations() {}int minus(int a, int b) {return a+(-b);}int multiply(int a, int b) {if(a==0 || b==0) return 0;if(a==1) return b;if(b==1) return a;if(a== -1)   return -b;if(b== -1)  return -a;int negative = 0;if(a < 0) negative += 1, a = -a;if(b < 0) negative += 1, b = -b;if(a > b) swap(a,b);// b*along temp = b;vector<int> b_2, count;int plus = 1;while(temp <= INT_MAX)//b_2数组[b*1,b*2,b*4...]{   b_2.push_back(temp);count.push_back(plus);//b乘以几得到上面的数temptemp += temp;plus += plus;}int ans = 0;for(int i = b_2.size()-1; i >= 0; i=minus(i,1)){while(a >= count[i]){ans += b_2[i];a = minus(a,count[i]);//把a拆分}}if(negative==1)return -ans;return ans;}int divide(int a, int b) {if(a==0 || b==INT_MAX || b==INT_MIN) return 0;if(b==1) return a;if(b== -1) return -a;int negative = 0;if(a < 0) negative += 1, a = -a;if(b < 0) negative += 1, b = -b;if(a < b) return 0;long temp = b;vector<int> b_2, count;int plus = 1;while(a >= temp){   b_2.push_back(temp);//[b*1,b*2,b*4,...]count.push_back(plus);//b乘以几得到上面的数temptemp += temp;plus += plus;}int ans = 0;for(int i = b_2.size()-1; i >= 0; i=minus(i,1)){while(a >= b_2[i]){ans += count[i];//商+倍数a = minus(a,b_2[i]);//把a减去b的倍数}}if(negative==1)return -ans;return ans;}
};

84 ms 15 MB

程序员面试金典 - 面试题 16.09. 运算(只用+法做乘除)相关推荐

  1. [Leetcode][程序员面试金典][面试题16.11][JAVA][跳水板][数学][动态规划]

    [问题描述][简单] [解答思路] 边界问题 k=0 ,不能产生跳水板,返回空数组 shorter 等于longer,只有一种跳水板,返回longerk 思路 一般情况,k块木板,k种可能 跳水板的长 ...

  2. java兰顿蚂蚁解题思路_程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)

    1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...

  3. 程序员面试金典 - 面试题 16.22. 兰顿蚂蚁(deque模拟)

    1. 题目 一只蚂蚁坐在由白色和黑色方格构成的无限网格上. 开始时,网格全白,蚂蚁面向右侧. 每行走一步,蚂蚁执行以下操作. (1) 如果在白色方格上,则翻转方格的颜色,向右(顺时针)转 90 度,并 ...

  4. 程序员面试金典 - 面试题 16.16. 部分排序(排序/不排序)

    文章目录 1. 题目 2. 解题 2.1 排序 2.2 不排序 1. 题目 给定一个整数数组,编写一个函数,找出索引 m 和 n ,只要将索引区间 [m,n] 的元素排好序,整个数组就是有序的. 注意 ...

  5. 程序员面试金典 - 面试题 16.18. 模式匹配(逻辑题)

    1. 题目 你有两个字符串,即pattern和value. pattern字符串由字母"a"和"b"组成,用于描述字符串中的模式. 例如,字符串"ca ...

  6. 程序员面试金典 - 面试题 16.14. 最佳直线(哈希map+set)

    1. 题目 给定一个二维平面及平面上的 N 个点列表Points,其中第i个点的坐标为Points[i]=[Xi,Yi]. 请找出一条直线,其通过的点的数目最多. 设穿过最多点的直线所穿过的全部点编号 ...

  7. 程序员面试金典 - 面试题 16.13. 平分正方形(数学)

    1. 题目 给定两个正方形及一个二维平面.请找出将这两个正方形分割成两半的一条直线. 假设正方形顶边和底边与 x 轴平行. 每个正方形的数据square包含3个数值,正方形的左下顶点坐标[X,Y] = ...

  8. 程序员面试金典 - 面试题 16.03. 交点(数学)

    1. 题目 给定两条线段(表示为起点start = {X1, Y1}和终点end = {X2, Y2}),如果它们有交点,请计算其交点,没有交点则返回空值. 要求浮点型误差不超过10^-6.若有多个交 ...

  9. 程序员面试金典 - 面试题 16.04. 井字游戏(计数)

    1. 题目 设计一个算法,判断玩家是否赢了井字游戏.输入是一个 N x N 的数组棋盘,由字符" ","X"和"O"组成,其中字符" ...

最新文章

  1. Redis源码解析——Zipmap
  2. 数 学 专 业 劝 退 指 南
  3. 通过阿里云容器镜像服务海外服务器构建spark-operator镜像
  4. BlackBerry 应用程序开发者指南 第二卷:高级--第11章 管理通知(Notification)
  5. ClickHouse:A股分钟数据的查询速度的测试[下]
  6. Github开源微信小程序Demo-用于学习交流
  7. 用74161设计十二进制计数器
  8. Hadoop 1.x 和 Hadoop 2.x 有什么区别?
  9. IE提示当前安全设置不允许下载该文件怎么办?
  10. Jmeter线程组之jp@gc - Stepping Thread Group
  11. 如何将HEXO部署到虚拟主机上
  12. 分享一个超级狠的面试题与经验
  13. CPT,CPM,CPS
  14. 开启Fluter基础之旅三-------Material Design风格组件、Cupertino风格组件、Flutter页面布局篇...
  15. JavaScript实现垃圾分类小游戏教程,附源码!
  16. KETTLE实现循环批量多表抽取添加字段
  17. dcloud 5+ 监听安卓前后台切换状态 并后台运行程序
  18. 使用conga部署RHCS
  19. oracle 数据库割接,oracle的一次数据割接(1)
  20. rook和longhorn_奔腾4s,DVD刻录,ASP.NET和Longhorn ...好吧...一天。

热门文章

  1. linux proc文件 write的原子性,linux - Linux中writev()系统调用的原子性 - 堆栈内存溢出...
  2. 445端口 mysql_关于如何关闭window端口445的详细介绍
  3. 如何通俗易懂地解释欧拉公式(e^πi+1=0)?
  4. jtoken判断是否包含键_Redis 数据库、键过期的实现
  5. 从0-1背包问题学习回溯法、分支界限法、动态规划
  6. 微信小程序继续入坑指南
  7. 在unity 中,使用http请求,下载文件到可读可写路径
  8. 二维码扫描和应用跳转
  9. Windows Phone 8安装包中的文件和独立存储区中的文件访问
  10. c study_13