不使用加减乘除做加法

来源:互联网 发布:什么是三级域名 编辑:程序博客网 时间: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
原创粉丝点击