阅读本文前建议先阅读:进制转换的概念及方法
题目解析:
十进制转换为其他进制即用十进制数字模要转的进制数,取余数,用商继续模直到模不尽为止,最后倒序输出。
因此,如果用程序来实现,我们可以通过定义两个变量:商和余数,用循环来控制商不断模,并且将每一位的余数拼接成字符串最后倒序输出即可!
代码实现
package 练习题;
import java.util.Scanner;
public class 进制转换10转n {
//十进制转其它进制
public static String To16(int n){
String r="";//空字符串,定义出来用于拼接字符
while (n>=16){ //转十六进制就是不断模16,所以要首先确保大于或等于16!
int yushu=n%16; //如果满足条件开始循环,取出余数,通过模运算
int shang=n/16; //取出商
if(yushu>9){//特殊处理 因为16进制的10-16 是用A-F代替
char c=(char) ((yushu-10)+'A'); //余数减去10得到的数再加A,就可以得到多的数
r+=c;//直接拼接字符串
}else {
r+=yushu; //这个是非特殊情况,直接拼接字符串按道理 转8转2都不需要特殊情况处理
}
n=shang; //循环结束时一定要将n值变成现在的商用于下一次计算,否则会无限循环!
}
if(n>9){ //循环结束后,如果商还是大与9也要做特殊处理!
char c=(char)((n-10)+'A'); //同上
r+=c; //拼接
}else {
r+=n; //拼接
}
return reverse(r); //倒序输出才能得到
}
public static String To8(int n){
String r="";
while (n>=8){
int yushu=n%8;
int shang=n/8;
r+=yushu;
n=shang;
}
r+=n;
return reverse(r);
}
public static String To2(int n){
String r="";
while (n>=2){
int yushu=n%2;
int shang=n/2;
r+=yushu;
n=shang;
}
r+=n;
return reverse(r);
}
//反转字符串(反转后就是正确顺序的十六进制数:从下到上的顺序)
private static String reverse(String r) {
String s="";
for(int i=r.length()-1;i>=0;i--){
s+=r.charAt(i);
}
return s;
}
public static void main(String[] args) {
System.out.println(To16(1020));
System.out.println(To8(1020));
System.out.println(To2(1020));
}
}
PS:只写了十转十六进制的注释,其他两种相差无几~
发表评论