不使用加减乘除做加法
来源:互联网 发布:什么是三级域名 编辑:程序博客网 时间:2024/05/01 17:50
问题描述:设计一个算法,不使用加减乘数运算符号实现加法运算。
分析:这个问题在实际的编程中不会碰到,因为加减乘除是基本的四则运算,其中加法是最根本的运算,因为减法就是加法,只不过是加上加数的相反数而已,
而乘法,则是将实现了加多次,除法就是减多次,因此只有加法是最核心的运算,可以说计算机只有一种运算就是加法,其他运算是在加法之上定义的
一个函数操作而已,因此我们总是能够够将所有的操作全部转换为加法操作。
然而计算机中的运算本质上都是通过位运算实现的,因此这里使用到了位运算。三步即可实现:
第一步:计算两个数的对应位,但是不计算进步,主要有四种情况,0+0=0,0+1=1,1+0=1,1+1=0,
可以看出这正好对应异或操作。
第二步:计算两个数的进位,只有在1+1的情况下才会有进位,这正好对应与运算,计算完之后,每位上的数正好是后一位的进位,
这时把结果左移一位即可。
第三步:把第一步的结果和第二步的结果相加,查看是否有进位,如果有进位重复第一步和第二步,直到没有进位为止。
具体的Java代码如下,写法比较通用,读者可以很容易的转化为其他语言实现:
import java.util.*;public class Main { public static int sum(int num1,int num2){ int s, c; do{ s=num1^num2; c=(num1&num2)<<1; num1=s; num2=c; }while(num2!=0); return num1; } public static void main(String[] args) { // TODO 自动生成的方法存根 Scanner scan=new Scanner(System.in); System.out.print("请输入第一个加数:"); int a=scan.nextInt(); System.out.print("请输入第二个加数:"); int b=scan.nextInt(); System.out.println(a+"+"+b+"="+sum(a,b)); }}
输出结果为:
请输入第一个加数:9
请输入第二个加数:10
9+10=19
虽然这个题目没有什么实际价值,但是有助于读者深刻理解计算机的内部运算结构,以及位运算的功能,
读者还是需要掌握这种方法的,在有些问题中可能会起到作用。
0 0
- 不使用加减乘除做加法
- 25 不使用加减乘除做加法
- 不使用加减乘除做两个数加法
- 不使用加减乘除运算做加法
- 不能用加减乘除做加法
- 《剑指Offer》面试题:不使用加减乘除做加法运算
- 不使用加减乘除实现加法
- 不使用加减乘除实现加法
- 实现加法:不使用加减乘除运算
- 不使用加减乘除符号计算加法
- leetcode解题之371. Sum of Two Integers Java版 (不使用加减乘除做加法)
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- 不用加减乘除做加法
- Socket(一)
- 今日记事20160511
- C++作业5
- 图的邻接表C实现
- 机器学习(Machine Learning)&深度学习(Deep Learning)资料(Chapter 1)
- 不使用加减乘除做加法
- android蓝牙开发——简单的文字传输
- Django学习起步(2)- 创建project试手
- Java反射总结(二)
- 三 ASP.NET MVC+Entity Framework 创建数据库
- hdu5671
- 加油,努力!!!
- 四个月总结之V1.0和V2.0
- C++作业(五)