该楼层疑似违规已被系统折叠 隐藏此楼查看此楼
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int n = sc.nextInt();
for(int cnt=0;cnt
String str = sc.next();
StringBuilder str2 = To_binary(str);
To_Octal(str2);
}
}
public static StringBuilder To_binary(String str){ //16进制转换为2进制
StringBuilder str2 = new StringBuilder(); //StringBuilder用来申明可变字符串
for(int i=0;i
char c = str.charAt(i);
switch(c){
case '0':
str2.append("0000");break;
case '1':
str2.append("0001");break;
case '2':
str2.append("0010");break;
case '3':
str2.append("0011");break;
case '4':
str2.append("0100");break;
case '5':
str2.append("0101");break;
case '6':
str2.append("0110");break;
case '7':
str2.append("0111");break;
case '8':
str2.append("1000");break;
case '9':
str2.append("1001");break;
case 'A':
str2.append("1010");break;
case 'B':
str2.append("1011");break;
case 'C':
str2.append("1100");break;
case 'D':
str2.append("1101");break;
case 'E':
str2.append("1110");break;
case 'F':
str2.append("1111");break;
default:break;
}
}
return str2;
}
public static void To_Octal(StringBuilder str){ //转为8进制,转1位输出1位
int len = str.length();
int ans=0,s = 0;
if(len % 3==1){ //最高位的补零模拟
ans = str.charAt(0)-'0';
s+=1;
}else if(len % 3==2){
ans = (str.charAt(0)-'0')*2 + (str.charAt(1)-'0');
s+=2;
}
if(ans>0)
System.out.print(ans);
boolean flog = true;
for(int i=s;i
ans =(str.charAt(i)-'0')*4+ (str.charAt(i+1)-'0')*2 + (str.charAt(i+2)-'0');
if(flog){
if(ans==0){
continue;
}else{
flog = false;
}
}
System.out.print(ans);
}
System.out.println();
}
}
这份答案中ans = (str.charAt(0)-'0')*2 + (str.charAt(1)-'0'); 还有ans =(str.charAt(i)-'0')*4+ (str.charAt(i+1)-'0')*2 + (str.charAt(i+2)-'0');看不懂,万能的吧友可以帮忙解释下这个的具体意思嘛