码迷,mamicode.com
首页 > 其他好文 > 详细

不使用加减乘除做加法

时间:2016-05-11 23:43:59      阅读:168      评论:0      收藏:0      [点我收藏+]

标签:

问题描述:设计一个算法,不使用加减乘数运算符号实现加法运算。

分析:这个问题在实际的编程中不会碰到,因为加减乘除是基本的四则运算,其中加法是最根本的运算,因为减法就是加法,只不过是加上加数的相反数而已,

         而乘法,则是将实现了加多次,除法就是减多次,因此只有加法是最核心的运算,可以说计算机只有一种运算就是加法,其他运算是在加法之上定义的

         一个函数操作而已,因此我们总是能够够将所有的操作全部转换为加法操作。

         然而计算机中的运算本质上都是通过位运算实现的,因此这里使用到了位运算。三步即可实现:

        第一步:计算两个数的对应位,但是不计算进步,主要有四种情况,0+0=0,0+1=1,1+0=1,1+1=0,

                   可以看出这正好对应异或操作。

        第二步:计算两个数的进位,只有在1+1的情况下才会有进位,这正好对应与运算,计算完之后,每位上的数正好是后一位的进位,

                   这时把结果左移一位即可。

        第三步:把第一步的结果和第二步的结果相加,查看是否有进位,如果有进位重复第一步和第二步,直到没有进位为止。

 

       具体的Java代码如下,写法比较通用,读者可以很容易的转化为其他语言实现:

 1 import java.util.*;
 2 public class Main {
 3     public static int sum(int num1,int num2){
 4         int s, c;
 5         do{
 6             s=num1^num2;
 7             c=(num1&num2)<<1;
 8             num1=s;
 9             num2=c;
10         }while(num2!=0);
11         return num1;
12     }
13     public static void main(String[] args) {
14         // TODO 自动生成的方法存根
15         Scanner scan=new Scanner(System.in);
16         System.out.print("请输入第一个加数:");
17          int a=scan.nextInt();
18          System.out.print("请输入第二个加数:");
19          int b=scan.nextInt();
20          System.out.println(a+"+"+b+"="+sum(a,b));
21     }
22 
23 }

输出结果为:

请输入第一个加数:9
请输入第二个加数:10
9+10=19

              虽然这个题目没有什么实际价值,但是有助于读者深刻理解计算机的内部运算结构,以及位运算的功能,

读者还是需要掌握这种方法的,在有些问题中可能会起到作用。

不使用加减乘除做加法

标签:

原文地址:http://www.cnblogs.com/guozhenqiang/p/5483990.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!