不使用算术运算符实现加法功能(java版)

不使用加减乘除做加法

题目描述:

写一个函数,求两个整数之和,要求在函数体内不得使用+、-、*、/四则运算符号

1.位运算

解题思路:

1.1 一位运算

异或运算: 加法运算:

1 ^ 1 = 0; 1 + 1 = 0; 产生进位
0 ^ 0 = 0; 0 + 0 = 0;
1 ^ 0 = 1; 1 + 0 = 1;
0 ^ 1 = 1; 0 + 1 = 1;

对于一位加法,异或运算等同于加法运算。

在位运算中使用 “<<”左移表示向左进一位。我们使用此来表示进位。

所以通过异或来实现加法,左移实现进位。

(a ^ b)   
(a & b) << 1

1.2 二位运算

正确的加法运算:

						11 + 01 = 100

套用上方的方法:

第一步:

11 ^ 01 = 10;
11 & 01 = 01;
01 << 1 =010;

第二步:循环一次

10 ^ 010 = 000;
10 & 010 = 010;
010 << 1 = 100;

当进位为0时,也就是没有进位时,停止循环,得到最终的结果。

1.3 三位运算

循环三次,得到最终的结果。

代码实现:递归版本,通过对数器验证。

package test1;

public class Test1 {
	
	 public static int Add(int num1,int num2) {
		 if(num2 == 0){
			 return num1;
		 }
	     int sum = num1^num2;
	     int carry = (num1&num2)<<1;
	     return Add(sum,carry);
	    }
	
	 public static int makeValue(int value){
		 int num = (int)((value) *Math.random());
		 return num;
	 }

	public static void main(String[] args) {
		int loop = 500000;
		int value = 100;
		boolean flag = true;
		for(int i = 0;i< loop; i++){
			int num1 = makeValue(value);
			int num2 = makeValue(value);
			int sumValue = Add(num1,num2);
			if((num1+num2)!= sumValue){
				System.out.println(num1 + " " + num2);
				System.out.println(sumValue);
				flag = false;
				break;
			}
		}
		System.out.println(flag ? "Nice" : "Fucking")}
}
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值