进制转换

题目描述:

链接: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());
    }
}
上一篇:字符串分割


下一篇:PHP大文件上传进度条源码