10-不用加减乘除做加法
题目
写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号。
数据范围:两个数都满足 −10≤n≤1000
进阶:空间复杂度 O(1),时间复杂度 O(1)
示例1
输入:1,2
返回值:3
示例2
输入:0,0
返回值:0
思路1:堪称一绝哈哈哈
求2个数的和,不用加减乘除,但是能用++和--,所以可以以0为界,将其中一个数++至0或者--至0,另一个数做相反的操作,就能得到结果。
代码1
public class Solution {public int Add(int num1,int num2) {while(num2 != 0){if(num2 > 0){num2 --;num1 ++;}if(num2 < 0){num2 ++;num1 --;}}return num1;}
}
思路2
不能用四则运算,那就只能利用位运算进行计算。
两个数二进制位相异或后的结果,是两数相加的结果(不考虑进位)
两个数二进制位相与后左移一位的结果,是两数相加后的结果(只考虑进位)
num1+num2=循环求(本位+进位)的值,直到不再产生进位。
十进制计算:例如 27+85=112
1)对各位只做相加不进位,结果为2;
2)考虑进位,7+5中有进位,进位的值是10;2+8有进位,进位的值是100;
3)将前面的三个结果相加,得到的结果为112。
二进制计算:例如 7+4=11,7的二进制为0111,4的二进制为0100
1)只做相加不进位,相当于异或操作:0111 ^ 0100 = 0011;
2)考虑进位,相当于与操作:0111 & 0100 = 0100,有进位,因此,将结果向前进位,得到1000;
3)因为存在进位,所以将以上得到的两个结果,重复步骤 1)和步骤 2),直到与操作不产生进位,此时步骤 1)得到的结果即为原始的两个数之和。
public class Solution {public int Add(int num1, int num2) {while (num2 != 0) {int temp = num1 ^ num2;num2 = (num1 & num2) << 1;num1 = temp;}return num1;}
}
10-不用加减乘除做加法相关推荐
- 剑指Offer_编程题 不用加减乘除做加法
不用加减乘除做加法 时间限制:1秒 空间限制:32768K 热度指数:81997 算法知识视频讲解 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 首先,十进 ...
- 《剑指offer》-- 构建乘积数组、求1+2+3+...+n、不用加减乘除做加法、包含min函数的栈、用两个栈实现队列
一.构建乘积数组: 1.题目: 给定一个数组A[0,1,...,n-1],请构建一个数组B[0,1,...,n-1],其中B中的元素B[i]=A[0]*A[1]*...*A[i-1]*A[i+1]*. ...
- 如何用java实现加减_用Java实现不用加减乘除做加法操作
面试题1:不用加减乘除,求两个整数的和. import java.util.Scanner; public class GetSum { /** * 不用加减乘除做加法: * 十进制中的18和7相加: ...
- java 加法不用_【Java】 剑指offer(65) 不用加减乘除做加法
本文参考自<剑指offer>一书,代码采用Java语言. 题目 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷四则运算符号. 思路 对数字做运算,除了四则运算外,只剩下位 ...
- [剑指offer]面试题47:不用加减乘除做加法
面试题47:不用加减乘除做加法 题目:写一个函数,求两个整数之和,要求在函数体内不得使用+.-.×.÷四则运算符号. 代码如下: int add(int num1, int num2) {int su ...
- 【LeetCode】剑指 Offer 65. 不用加减乘除做加法
[LeetCode]剑指 Offer 65. 不用加减乘除做加法 文章目录 [LeetCode]剑指 Offer 65. 不用加减乘除做加法 一.位运算 一.位运算 本题考察对位运算的灵活使用,即使用 ...
- 剑指offer不用加减乘除做加法_剑指Offer-不用加减乘除做加法
题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用+.-.*./四则运算符号. 思路 思路一: 位运算 思路二: 递归 思路三: 调用Integer的sum方法 思路四: 自增自减 代码实现 ...
- Python 解决面试题47 不用加减乘除做加法
在看<剑指Offer>过程中,面试题47不用加减乘除做加法,给出的思路是使用二进制的异或以及与运算,总之就是使用二进制.但是在使用Python实现的过程中,对于正整数是没有问题的,但是对于 ...
- 剑指offer——面试题47:不用加减乘除做加法
剑指offer--面试题47:不用加减乘除做加法 Solution1: 学习之 书上的思路就很好啊~ class Solution {public:int Add(int num1, int num2 ...
- 剑指 Offer 65. 不用加减乘除做加法(位运算、递归、迭代)
一.题目 剑指 Offer 65. 不用加减乘除做加法 题目描述 写一个函数,求两个整数之和,要求在函数体内不得使用 "+"."-"."*" ...
最新文章
- 区块链技术入门,都涉及哪些编程语言?
- android md日期选择器,移动端日期选择
- PE结构基址重定位表
- NYOJ 303 序号转换 数学题
- CTF Geek Challenge——第十一届极客大挑战Web Write Up
- RAC (双节点) + 单实例 DATAGUARD 安装遇到的问题处理
- 如何将本地jar包放入本地maven仓库和远程私服仓库
- 1.1图像处理的概念
- java模式之装饰模式
- 通过javascript动态显示界面控件
- python压缩和读取.tar.bz2格式的压缩包
- linux 循环小时,shell脚本日期遍历(按天按小时)
- JVM调优总结(转载)
- Python学习-第三天-面向对象编程基础
- gp数据库 创建数据库 创建表 分区
- 设计模式 英文名Design Pattern
- H5纯页面方式手机端实现“扫一扫”功能(不是直接调起摄像头)
- 7-33 电话聊天狂人
- 3D Dirichlet Free-Form Deformation(三维Dirichlet自由变形)
- 12年来最大飞跃!黄仁勋发布史上最强GPU,世界首个实时光线追踪新一代图灵架构...