用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; } }
相关文章推荐
- 剑指offer面试题47 不用加减乘除做加法 (java实现)
- 不用加减乘除做加法(Java实现)
- java实现不用加减乘除做2个数的加法
- 剑指Offer面试题47:不用加减乘除做加法 Java实现
- Java实现不用加减乘除做加法
- 不用加减乘除做加法java实现
- 面试算法题:不用+、-、×、÷数字运算符做加法 (位运算实现加法操作)
- 剑指offer-不用加减乘除做加法-java
- c笔试面试 之 不用加法操作(用逻辑运算)实现两个正整数的除法
- 不用加减乘除实现加法
- java中不用BigInteger实现超大整数的乘法操作
- 不用加减乘除实现两个正整数的加法
- java无加减乘除运算符实现加法
- 剑指Offer(Java版):不用加减乘除做加法
- 不用加减乘除实现加法运算
- 不用加减乘除实现加法运算
- 不用加减乘除做加法(java版)
- 不用加减乘除实现加法运算
- Java GUI:不用JDialog实现窗口跳转后无法操作原窗口
- java中不用BigInteger实现超大整数的乘法操作