标签:
问题描述:设计一个算法,不使用加减乘数运算符号实现加法运算。
分析:这个问题在实际的编程中不会碰到,因为加减乘除是基本的四则运算,其中加法是最根本的运算,因为减法就是加法,只不过是加上加数的相反数而已,
而乘法,则是将实现了加多次,除法就是减多次,因此只有加法是最核心的运算,可以说计算机只有一种运算就是加法,其他运算是在加法之上定义的
一个函数操作而已,因此我们总是能够够将所有的操作全部转换为加法操作。
然而计算机中的运算本质上都是通过位运算实现的,因此这里使用到了位运算。三步即可实现:
第一步:计算两个数的对应位,但是不计算进步,主要有四种情况,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