题目链接
知识一览
01-十六进制转二进制/二进制除法(A - CRC Test)
题目列表
快输
static class FastReader{
BufferedReader br;
StringTokenizer st;
String tmp;
public FastReader() {
br=new BufferedReader(new InputStreamReader(System.in));
}
String next() {
while(st==null||!st.hasMoreElements()) {
try {
st=new StringTokenizer(br.readLine());
}catch(IOException e) {
e.printStackTrace();
}
}
return st.nextToken();
}
int nextInt() {
return Integer.parseInt(next());
}
long nextLong(){return Long.parseLong(next());}
String nextLine() {
String str="";
try {
str=br.readLine();
}catch(IOException e) {
e.printStackTrace();
}
return str;
}
boolean hasNext(){
if(st!=null&&st.hasMoreTokens())return true;
try {
tmp=br.readLine();
st=new StringTokenizer(tmp);
}catch(IOException e) {
return false;
}
return true;
}
}
static PrintWriter out=new PrintWriter(
new BufferedWriter(new OutputStreamWriter(System.out)));
static FastReader sc=new FastReader();
A - CRC Test
解法参考:A CRC Test
public static void main(String[] args) {
int T=sc.nextInt();
String s1;
char[] s2;
init();
while(T-->0) {
s2=sc.next().toCharArray();//除数
s1=parseHex2Binary(sc.next());
int k=s2.length-1;//k value
StringBuilder sb=new StringBuilder(s1);
for(int i=0;i<k;i++){
sb.append('0');
}
while(sb.length()>k){
for(int i=0;i<=k;i++){
if(s2[i]==sb.charAt(i)) sb.setCharAt(i,'0');
else sb.setCharAt(i,'1');
}
while(sb.charAt(0)=='0'&&sb.length()>k)sb.deleteCharAt(0);
}
out.println(sb);
}
out.flush();
}
static String[] str={"0000","0001","0010","0011","0100","0101","0110","0111","1000","1001"};
static Map<Character,String> mp;
static void init() {
mp=new HashMap<>();
for(int i=0;i<=9;i++)mp.put((char)('0'+i),str[i]);
mp.put('A',"1010");mp.put('B',"1011");mp.put('C',"1100");
mp.put('D',"1101");mp.put('E',"1110");mp.put('F',"1111");
}
//十六进制转二进制
static String parseHex2Binary(String s) {
char[] c=s.toCharArray();
StringBuilder sb=new StringBuilder();
for(int i=0;i<c.length;i++) {
sb.append(mp.get(c[i]));
}
//去除前导0
return sb.toString().replaceFirst("^0*", "");
}