首页 > 代码库 > 给定一个十进制数,将其转化为N进制数-----17年滴滴笔试题

给定一个十进制数,将其转化为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年滴滴笔试题