题目描述
给定两个32位整数a和b,返回a和b中较大的,要求不能用任何比较判断运算符。
输入描述:
输出两个整数a和b,a和b均为32位整数。
输出描述:
输出一个整数,两个数中较大的那一个。
示例1
输入
1 0
输出
1
解法一:先减,根据此值判断,为防止溢出中间处理一下
import java.io.*;
import java.util.*;
public class Main{
public static void main(String[] args) throws Exception{
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
String[] info = br.readLine().trim().split(" ");
int a = Integer.parseInt(info[0]);
int b = Integer.parseInt(info[1]);
getMax(a,b);
}
public static void getMax(int a,int b){
int c = a-b;
int sa = sign(a);
int sb = sign(b);
int sc = sign(c);
int dif = sa^sb;
int same = flip(dif);
int returna = dif*sa+same*sc; //不同按sa判断,相同按sc判断
int returnb = flip(returna);
System.out.println(returna*a+returnb*b);
}
public static int sign(int a){
return flip((a>>31)&1);
}
public static int flip(int a){
return a^1;
}
}