给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题

Posted 新竹六月

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题相关的知识,希望对你有一定的参考价值。

题目:给定一个十进制数M,将其转化为N进制数,其中2<=N<=16,其中N为32为整型数;

输入:M N,如7 2

输出转化结果:111

注意点:考虑负数的情况,记得添加负号;

思路:1. 使用一个辅助栈来存放M对N取余的结果(M%N);

     2. 处理余数<=9和>9两种情况,因为按照16进制,>9的数用ABCDEF取代

     3. 再更新取余后M的取值:M=M/N;

     4. 循环处理2,3两个步骤,直到M=0;

   5. 处理最终结果,出栈,直到栈为空;

代码如下:

package com.didi;

import java.util.Scanner;
import java.util.Stack;

public class Main {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub

        Scanner scanner = new Scanner(System.in);
        while(scanner.hasNext()){
            int M = scanner.nextInt();
            int N = scanner.nextInt();
            if(M>=0){
                convert(M, N);
            }
        }
    }
    
    public static void convert(int m, int n){
        if(n==10){
            System.out.println(m);
            return;
        }
        boolean flag = true;
        Stack<Integer> stack = new Stack<Integer>();
        StringBuilder str = new StringBuilder();
        char[] ch = {‘A‘,‘B‘,‘C‘,‘D‘,‘E‘,‘F‘};
        while(m!=0){
            if(m%n<10){
                stack.push(m%n+‘0‘);
            }else{
                stack.push(m%n-10+‘A‘);
            }
            m = m/n;
        }
        while(!stack.isEmpty()){
            if(m<0&&flag){
                str.append("-");
                flag = false;
            }
            if(stack.peek()-‘0‘<10){
                str.append(stack.pop()-‘0‘);
            }else{
                str.append(ch[stack.pop()-‘A‘]);
            }
        }
        System.out.println(str.toString());
    }
}

 

以上是关于给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题的主要内容,如果未能解决你的问题,请参考以下文章

蓝桥杯 十六进制转化为八进制

进制转换

进制转换

实现进制转化伪代码

504. 七进制数

504. 七进制数