编写一个方法,找出两个数字a和b中最大的那一个。不得使用if-else或其他比较运算符。
示例:
输入: a = 1, b = 2
输出: 2
题意:找出两个数的最大值,不能使用if-else或其他比较运算符。
思路:利用数学公式
求绝对值时,为了不用系统的Math.abs(),我们自己写一个:
long absolute(long a) { int flag = (int) (a >> 63); //a为正数flag = 0,a为负数flag = -1 return (flag ^ a) - flag; //任何数与0异或值不变,任何数与-1异或等价于按位取反 }
正确代码:
class Solution { long absolute(long a) { int flag = (int) (a >> 63); //a为正数flag = 0,a为负数flag = -1 return (flag ^ a) - flag; //任何数与0异或值不变,任何数与-1异或等价于按位取反 } public int maximum(int a, int b) { long aa=a; long bb=b; int num=(int)((absolute(aa-bb)+aa+bb)/2); return num; } }
完整代码(含测试代码):
package com.Keafmd.day0103; /** * Keafmd * * @ClassName: Maximum * @Description: 最大数值 * @author: 牛哄哄的柯南 * @date: 2021-01-03 19:39 */ public class Maximum { public static void main(String[] args) { Solution solution = new Solution(); int a=8,b=-26; int result = solution01032.maximum(a,b); System.out.println(result); } } class Solution { long absolute(long a) { int flag = (int) (a >> 63); //a为正数flag = 0,a为负数flag = -1 return (flag ^ a) - flag; //任何数与0异或值不变,任何数与-1异或等价于按位取反 } public int maximum(int a, int b) { long aa=a; long bb=b; int num=(int)((absolute(aa-bb)+aa+bb)/2); return num; } }
输出结果:
8 Process finished with exit code 0