Problem Description
输入一个十进制数N,将它转换成R进制数输出。
Input
输入数据包含多个测试实例,每个测试实例包含两个整数N(32位整数)和R(2<=R<=16, R<>10)。
Output
为每个测试实例输出转换后的数,每个输出占一行。如果R大于10,则对应的数字规则参考16进制(比如,10用A表示,等等)。
Sample Input
7 2
23 12
-4 3
Sample Output
111
1B
-11
这里对n转换成r进制,以取余的形式来算,用一个数组把取余结果存储下来,再倒着进行输出。
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
while(sc.hasNext()){
int n=sc.nextInt();
int m=sc.nextInt();
boolean flag=false;
if(n<0){
flag=true;//标记是否最后输出“-”
n=-n;
}
int arr[]=new int[50];
int k=0;
// if(n==0){//这一题不会输入n=0的情况
// print(n);
// continue;
// }
while(n>0){
arr[k++]=n%m ;
n=n/m;
}
// for(int i=0;i<10;i++){
// System.out.print(arr[i]);
// }System.out.println();
int num=50;//标记转换成r进制后有效数字的个数
for(int i=49;i>=0;i--){
if(arr[i]==0){
num--;
}else{
break;
}
}
// System.out.println("num:"+num);
if(flag){
System.out.print("-");
}
for(int i=num-1;i>=0;i--){
print(arr[i]);
}
System.out.println();
}
}
public static void print(int x){
if(x>9){
switch(x){
case 10:System.out.print("A");break;
case 11:System.out.print("B");break;
case 12:System.out.print("C");break;
case 13:System.out.print("D");break;
case 14:System.out.print("D");break;
case 15:System.out.print("F");break;
}
}else{
System.out.print(x);
}
}
}