您的位置:首页 > 编程语言 > Java开发

用Java实现不用加减乘除做加法操作

2014-03-28 10:30 232 查看
面试题1:不用加减乘除,求两个整数的和。

import java.util.Scanner;

public class GetSum {

/**
* 不用加减乘除做加法;
* 十进制中的18和7相加;可以分成这样三步来计算:一.无进位的各个位相加得18+7=15;二.18加7的进位是10
* 三.用一和二的结果相加15+10=25
* 对数字运算除了使用四则运算,那就剩下位运算了,而位运算是针对二进制的运算
* 18在计算机中用:10010   7在计算机中用:111
* 一.无进位的各个位相加得10010+111=10101;注意观察相加的结果值和  这两个数进行异或的值相等
* 二.进位是10010+111=100  求两数相加的进位,相当于两数做按位与运算后再左移一位
* 三.再用10101+100发现还有进位,用10101和100重复第一第二步骤,异或得10001
*   按位与后左移一位得 进位值是1000
*   此时10001+1000=11001 没有进位,相当于两数做异或运算
*
*   所以编程时,只要写一个循环 对两个数反复做  异或和按位与后左移一位操作  直到没有进位后
*   输出两个数的异或值。
* @param args
*/
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner sc = new Scanner(System.in);
System.out.print("a= ");
int a = sc.nextInt();
System.out.print("b= ");
int b = sc.nextInt();
System.out.println("a+b="+add(a,b));
}

public static int add(int a,int b){
int sum,carry;
do{
sum = a^b;
carry = (a&b)<<1;
a = sum;
b = carry;
}while(carry!=0);
return sum;
}

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: