题目 1572: [蓝桥杯][算法提高VIP]进制转换
时间限制: 1Sec 内存限制: 128MB 提交: 880 解决: 378
题目描述
程序提示用户输入三个字符,每个字符取值范围是0-9,A-F。然后程序会把这三个字符转化为相应的十六进制整数,并分别以十六进制,十进制,八进制输出。
输入
输入只有一行,即三个字符。
输出
三个整数,中间用空格隔开。
样例输入
FFF
样例输出
FFF 4095 7777
import java.util.Scanner;
public class Main {
/**
* @param args
*/
public static void main(String[] args) {
//先转换成十进制,然后转换成其他进制
//n进制转十进制方法
//按权相加。i*n^权+
//十进制转n进制方法
//除n取余,逆序排列
Scanner sc=new Scanner(System.in);
String HEX=sc.next();
int dec=N_Dec(HEX, 16);
System.out.print(Dec_n(dec, 16)+" ");
System.out.print(Dec_n(dec, 10)+" ");
System.out.print(Dec_n(dec, 8));
}
//n进制转十进制
//num:需要转10进制的数
//n:n进制
public static int N_Dec(String num,int n){
int result=0;
for (int i = num.length()-1,m=0; i >=0; i--,m++) {
char c=num.charAt(i);
int x=0;
if (c>='0' && c<='9') {
x=Integer.parseInt(c+"");
}else if(c>='A' && c<='F'){
x=(int)c-55;
}
result+=(x*Math.pow(n, m));
}
return result;
}
//十进制转n进制,除n得余,逆序排列
//dec:十进制
//n:n进制
public static String Dec_n(int dec,int n) {
StringBuffer result=new StringBuffer();
while (dec!=0) {
int mod=dec%n;
char Cmod;
if (mod>=10) {
Cmod=(char)(mod+55);
}else {
Cmod=(mod+"").charAt(0);
}
result.insert(0,Cmod);
dec/=n;
}
if (result.length()==0) {
return "0";
}
return result.toString();
}
}