描述:
判断一个数字是否为优秀数字。优秀数字定义为,一个整数M(M>=0),有2条规则:
规则1:存在一个正整数N(N>=0),使得M=2^N+1;
规则2:存在一个正整数N(N>=0),使得M=2^N-1;
若同时满足规则1和规则2,则输出Very Good
若满足规则1而不满足规则2,则输出Good
若不满足规则1而满足规则2,则输出Bad
若都不满足,则输出Normal
输入:
一个整数M(M>=0)
输出:
输出该数属于的类型
输入样例:
3
5
7
8
输出样例:
Very Good
Good
Bad
Normal
思路:可理解为将M+1, M-1 都等于是2^N。
code:
private static String solution(String line) { long val = Long.valueOf(line.trim()); long pre = val - 1; long next = val + 1; //处理val == 0的情况 if(pre < 0){ pre = 0; } while(pre > 1){ if(pre % 2 == 0){ pre /= 2; }else{ pre = 0; } } while(next > 1){ if(next % 2 == 0){ next /= 2; }else{ next = 0; } } if(pre == 1 && next == 1){ return "Very Good"; }else if(pre == 1 && next == 0){ return "Good"; }else if(pre == 0 && next == 1){ return "Bad"; }else{ return "Normal"; } }