java中求和方法,java中的算术运算符

  java中求和方法,java中的算术运算符

  今天就遇到了这样一个问题。

  题目说不能用算术运算符,只能从逻辑运算符和移位运算符入手。

  我们知道,(XOR)运算是将两个数相加而不进位。如果两个数相加不产生进位,那么和就是两个数之和。这是解决问题的关键。一般来说,两个数相加会产生进位。要得到正确的和,要在“和无进位”的基础上加上进位。那我们应该先拿行李。我们知道,当两个数对应的位置都是1时,就会产生进位,也就是对应的位置AB==1时,就可以得到每一位的进位。但是进位是把这个1加到对应的高位,所以我们会把整个进位左移一位,然后和之前得到的“无进位和”相加,就可以得到两个数的和。

  我们发现在这里我们可以拥有无限的娃娃。要得到“无进位和”与“进位生成和”的和,把这两个数作为新数,求和。它还重复前面的运算,直到两个数不能产生进位,通过运算直接得到结果。

  假设我们找到了23 ^ 16的值。

  按照上面的思路,我们就可以轻松的编写代码了。

  Public static int addab (int a,int B){//当两个数的进位为0时,退出循环,返回其无进位和,这是while(A B)的结果!=0){ int a _ b=a ^ b;//无进位求和int AB=(A B)1;//求进位//下一步是求无进位和,重复前面的操作,直到不产生进位A=A _ B;B=AB}//最后返回新的和,不进位返回(a b);}所以为了验证它的正确性,我们在这里使用对数来比较这个函数和操作符。

  public static void main(String[]args){ int count=1 _ 0000 _ 0000;//比较次数100,000,000次Random Random=new Random();//生成一个随机数布尔标志=true//如果相等,则对于(int I=0;我数;I){ int num 1=random . nextint(Integer。MAX _ VALUE/2);//随机正数1 int num 1 _ 2=Random . nextint(integer . max _ value/2);//随机正数2 //随机正数1随机正数2 if ((num1 num1_2))!=addAB(num1,num1_2)){ //如果不等于一次,则退出循环flag=false打破;} int num2=-random.nextInt(整数。MAX _ VALUE/2);//随机负数1 int num 2 _ 2=-Random . nextint(integer . max _ value/2);//随机负数2 //随机负数1随机负数2 if ((num2 num2_2))!=addAB(num2,num2_2)){ //如果不等于一次,则退出循环flag=false打破;} int num3=random.nextInt(整数。MAX _ VALUE);//随机正数int num 4=-random . nextint(integer . max _ value);//随机负数//随机正数随机负数if ((num3 num4))!=addAB(num3,num4)){ //如果不等于一次,则退出循环。flag=false打破;} } system . out . println(flag);}运行结果:

  最终输出结果为真,意味着我们对随机生成的正数、负数、正数分别计算100,000,000次,都没有错误,说明函数是可靠的。

  关于Java的无算术运算符求和法的这篇文章到此为止。有关Java求和的更多信息,请搜索以前关于流行IT的文章或继续浏览下面的相关文章。我希望你以后能更多地支持流行音乐!

郑重声明:本文由网友发布,不代表盛行IT的观点,版权归原作者所有,仅为传播更多信息之目的,如有侵权请联系,我们将第一时间修改或删除,多谢。

留言与评论(共有 条评论)
   
验证码: