题目:
将一个十进制数转换成任意进制数。(36进制以内)
思路:
- 先获取转换后的各个数位的数值
如将17转换成2进制
转换后最高位: 17 % 2 = 1
次高位: 17 / 2 % 2 = 8 % 2 = 0
次次高位: 17 / 2 / 2 % 2 = 0
…
最低位: 17 / 2 /… / 2 = 0 时的模
由此可知,10进制转换成N进制,即为不断对N取模
- 再对数值进行处理
若余数大于9,则需用A~Z进行替换表示,将对应的数值的字符存入记录转换结果的字符数组中;如11 —>‘B’ = 66 --> 11-10+‘A’
若余数小于9,则直接存储其数值对应的字符;
8—>‘8’ = 56 --> 8+‘0’
实现:
import java.util.Scanner;
public class toHex {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner reader = new Scanner(System.in);
int num = reader.nextInt();
int n = reader.nextInt();
char th[] = toHex(num,n);
for(int i=0;i<th.length;i++)
{
System.out.print(th[i]);
}
}
static char[] toHex(int num,int N)
{
char ch[] = new char[20]; //受int字节的限制
int k = 0;
while(num>0)
{
int t = num % N;
if(t>9)
{
ch[k] = (char)((t-10)+'A');
}
else
{
ch[k] = (char)(t+'0');
}
k++;
num = num/N;
}
char th[] = new char[k];
k = k-1;
for(int i=0;i<th.length;i++)
{
th[i] = ch[k--];
}
return th;
}
}