A进制转B进制
A=10?
1、A=10->A除B取余至余数为0,将余数从下往上连接即可;
2、A!=10->A从右往左第i位*A的i次方(i从0开始)转成10进制;
16和8之间的转换要通过2进制转换也可以,但其实转2的时候也是把每一位当成10进制数去除2取余得到每一位的二进制数最后连起来,值得注意的是转换顺序
比如7534(8)转成2进制
7转成2进制=0111,5%2=0101,3%2=0011,4%2=0100,然后把最高位的0去掉
得到的是111 101 011 100
再转为16进制1111->f 0101->5 1100->c
而其他进制则不能通过2进制进行转换,比如3进制的21转为2进制应该是111。不是通过2->0010,1->0001,而是先转为10进制21(3)->7(10)->111(2)
import java.util.Scanner;
public class BaseConversion {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner in = new Scanner(System.in);
System.out.println("请输入待转换数的进制(不能为0或负数):");
int A = in.nextInt();
while(A<=0) {
System.out.println("都说了不能为负数或者0!请重新输入!");
A = in.nextInt();
}
String N1 = in.nextLine();
System.out.println("请输入待转换数的值(请遵守进制规则):");
String Number = in.nextLine();
int Number_10 = 0;
int pow = 1;
for(int i = Number.length()-1;i>=0;i--) {
int Asc = Number.charAt(i)-'0';
if(Asc>=0&&Asc<=9) {
if(Asc>=A) {
System.out.println("请遵守进制规则");
return;
}
Number_10 = Number_10+Asc*pow;
pow = pow*A;
}else if(Asc>=17&&Asc<=42) {
if(Asc>=A) {
System.out.println("请遵守进制规则");
return;
}
Number_10 = Number_10+Asc*pow;
pow = pow*A;
}else {
System.out.println("请遵守进制规则");
return;
}
}
System.out.println("请输入想要转换的进制(不能为0或负数):");
int B = in.nextInt();
StringBuilder re = new StringBuilder();
while(Number_10>0) {
int yushu = Number_10%B;
re.append(yushu);
Number_10 = Number_10/B;
}
System.out.println("结果是:"+re.reverse());
}
}