1.题目描述:
将非负十进制整数n转换成b进制。(其中b=2~16)
2.解题思路:
给定一个数n,通过每次求余b,依次得到转换为对应b进制的逆序序列。
(1)当b<=10时,按照上述说法依次执行,用n求余b,存放在字符数组中,
然后n除以b,直到n为0.
(2)当b>10时,若n求余b大于9,要表示成A,B,C,D,E,则在这种情况下, 对于求余的结果做’A’+(mod%10)的处理。比如mod=11,得到此次的结果为
‘A’+1,为B.
3.代码:
import java.util.Scanner;
public class One {
private static StringBuilder revert=new StringBuilder("");
//递归实现
private static void core(int n,int r){
if (n==0){
return;
}
int mod=n%r;
if (r>10&&mod>9){
revert.append((char)('A'+(mod%10)));
}else {
revert.append((char)(mod+'0'));
}
core(n/r,r);
}
public static String fun1(int n,int r){
char [] re=new char[n/2+1];
core(n,r);
return revert.reverse().toString();
}
// 非递归实现
public static String fun2(int n,int r){
if (n==0){
System.out.println(0);
return null;
}
char [] s=new char[n/2+1];
int index=-1;
while (n!=0){
int mod=n%r;
if (r>10&&mod>9){
s[++index]=(char)('A'+(mod%10));
}else {
s[++index]=(char)(mod+'0');
}
n/=r;
}
StringBuilder re=new StringBuilder("");
for (int i=index;i>-1;i--){
re.append(s[i]);
}
return re.toString();
}
public static void main(String[] args) {
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int r=in.nextInt();
System.out.println("非递归实现:");
System.out.println(fun2(n,r));
System.out.println("递归实现:");
System.out.println(fun1(n,r));
}
}