题目描述:
链接:https://www.nowcoder.com/questionTerminal/ac61207721a34b74b06597fe6eb67c52
来源:牛客网
给定一个十进制数M,以及需要转换的进制数N。将十进制数M转化为N进制数
输入描述:
输入为一行,M(32位整数)、N(2 ≤ N ≤ 16),以空格隔开。
输出描述:
为每个测试实例输出转换后的数,每个输出占一行。如果N大于9,则对应的数字规则参考16进制(比如,10用A表示,等等)
示例1
输入
7 2
输出
111
解题思路:这道题目其实难度不高,是我参加腾讯面试的时候面试官给我出的题目,但是我现场没有写出来,太拉了,犯了低级错误,这里用的是“辗转相除法”,思路非常简单,看看代码就懂了。为什么一到面试的时候就掉链子。。
代码
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
Scanner sc = new Scanner(System.in);
int src = sc.nextInt();
int base = sc.nextInt();
boolean flag = false;
if(src<0){
src = -src;
flag = true;
}
int m = (int) (Math.log(src) / Math.log(base));
if(src==0){
System.out.println(0);
return;
}
StringBuffer sb = new StringBuffer();
while(m>=0){
int t = (int) Math.pow(base, m);
int p = src / t;
src %= t;
if(p>9){
sb.append((char)('A' + (p-10)));
}else{
sb.append(p);
}
m--;
}
if(flag){
sb.insert(0, '-');
}
System.out.println(sb.toString());
}
}