颜色反转(百度2017秋招真题)
题目描述
在 Web 开发中,通常使用 16 进制 RGB 表示一个颜色。
例 如 #0000FF 表示蓝色,#FF7F50 表示珊瑚红。在这道题中,我们要求把给定的一种颜色取反,方法是把 RGB 的每个位转换成十进制 rgb,再用 255 减去,再转换成 16 进制。例如蓝色取反是黄色(#FFFF00)。
输入
请从控制台读取输入,输入不超过50行,每行包含一个16进制 RGB 表示一种颜色,保证题目中的字母均大写。
输出
请向控制台输出你的结果,对于读取的每一行输入,输出一行格式相同的 16 进制 RGB 表示取反后的颜色,要求字母也是大写。
样例输入
0000FF
FFFF00
样例输出
FFFF00
0000FF
import java.io.BufferedReader;
import java.io.BufferedWriter;
import java.io.IOException;
import java.io.InputStreamReader;
import java.io.OutputStreamWriter;
import java.io.PrintWriter;
import java.util.Scanner;
public class Main {
private static String reverseColor(String str) {
String result = "";
int len = str.length();
for (int i = 1; i < len; i++) {
char tmp = str.charAt(i);
switch(tmp){
case '0': result+='F'; break;
case '1': result+='E'; break;
case '2': result+='D'; break;
case '3': result+='C'; break;
case '4': result+='B'; break;
case '5': result+='A'; break;
case '6':
case '7':
case '8':
case '9': result+=(15-(tmp-'0')); break;
case 'A':result+='5';break;
case 'B':result+='4';break;
case 'C':result+='3';break;
case 'D':result+='2';break;
case 'E':result+='1';break;
case 'F':result+='0';break;
default: break;
}
}
return result;
}
public static void main(String[] args) throws IOException {
Scanner in = new Scanner(new BufferedReader(new InputStreamReader(System.in)));
PrintWriter out = new PrintWriter(new BufferedWriter(new OutputStreamWriter(System.out)));
String str;
while (in.hasNext()) {
str = in.next();
out.println("#"+reverseColor(str));
}
out.flush();
}
}