题目描述
请你编一程序实现两种不同进制之间的数据转换。
输入格式
共三行,第一行是一个正整数,表示需要转换的数的进制n(2≤n≤16)n(2≤n≤16),第二行是一个n进制数,若n>10n>10则用大写字母A-FA−F表示数码10-1510−15,并且该nn进制数对应的十进制的值不超过10000000001000000000,第三行也是一个正整数,表示转换之后的数的进制m(2≤m≤16)m(2≤m≤16)。
输出格式
一个正整数,表示转换之后的mm进制数。
输入输出样例
输入
16
FF
2
输出
255
11111111
思路
先转换成十进制,再由十进制转化为其他进制
转换为十进制:
public static int todecimal(char a)
{
if(a=='A') return 10;
if(a=='B') return 11;
if(a=='C') return 12;
if(a=='D') return 13;
if(a=='E') return 14;
if(a=='F') return 15;
return (int)(a-'0');
}
转换为目标进制
public static char totarget(int a)
{
if(a==15) return 'F';
if(a==14) return 'E';
if(a==13) return 'D';
if(a==12) return 'C';
if(a==11) return 'B';
if(a==10) return 'A';
return (char) (a+'0');
}
完整代码
import java.util.*;
import java.io.*;
public class Main {
public static void main(String[] args) throws IOException{
Scanner scan = new Scanner(System.in);
int n = scan.nextInt(); //需要转换的
String getchar = scan.nextLine();
String input = scan.nextLine();
int m = scan.nextInt(); //转换后的
char[] str = input.toCharArray();
int x=1;
int sum=0;
for(int i=str.length-1;i>=0;i--)
{
sum+=todecimal(str[i])*x;
x*=n;
}
System.out.println(sum); //十进制
String ans="";
while(sum!=0)
{
ans=totarget(sum%m)+ans;
sum/=m;
}
System.out.println(ans); //目标进制
}
public static int todecimal(char a)
{
if(a=='A') return 10;
if(a=='B') return 11;
if(a=='C') return 12;
if(a=='D') return 13;
if(a=='E') return 14;
if(a=='F') return 15;
return (int)(a-'0');
}
public static char totarget(int a)
{
if(a==15) return 'F';
if(a==14) return 'E';
if(a==13) return 'D';
if(a==12) return 'C';
if(a==11) return 'B';
if(a==10) return 'A';
return (char) (a+'0');
}
}