蓝桥杯-第8天
题目(进制转换)
- 用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出,十六进制表示成3位,八进制表示成4位,若不够前面补0。(不考虑输入不合法的情况)
- 输入
1D5
输出
(注意冒号后面有一个空格)
Hex: 0x1D5
Decimal: 469
Octal: 0725
解法
-
这里我们需要知道16进制如果转到10进制的,如果我们熟悉的话可以知道其实和2进制转10进制一样,我们可以这么想,16进制从右往左数,是 1 16 256 1\quad16\quad256 116256等等,只要知道了这个规律,其实这种多进制转换,中间进制就是10进制,通过10进制进行中间
-
public static void main(String[] args){ Scanner in = new Scanner(System.in); String str = in.nextLine(); //先将16进制转化为10进制 int sum = 1; int result = 0; for(int i=str.length()-1;i>=0;i--){ if(str.charAt(i)>='A'){ result += (str.charAt(i)-'A'+10)*sum; }else{ result += (str.charAt(i)-'0')*sum; //System.out.println(Integer.valueOf(str.charAt(i))); } sum = sum*16; } //System.out.print(result); //计算八进制结果 String str1 = ""; int temp = result; while(result!=0){ str1+=String.valueOf(result%8); //System.out.println(result%8); //System.out.println(String.valueOf(result%8)); result = result/8; } while(str1.length()<4){ str1 +="0"; } str1 = new StringBuilder(str1).reverse().toString();//转换8进制完成 //System.out.print(str1); //这题目太奇怪了,为啥要16进制还要输出 String str2 = ""; while(temp!=0){ if(temp%16>=10){ str2+=String.valueOf((char)(temp%16-10+'A')); // System.out.println((temp%16-10)+'A'); }else{ str2+=String.valueOf(temp%16); } temp = temp/16; } str2 = new StringBuilder(str2).reverse().toString(); System.out.print(str2); // System.out.print(str2); }
-
时间复杂度 O ( n ) O(n) O(n)