給定一個十進制數,將其轉化爲N進制數-----17年滴滴筆試題

題目:給定一個十進制數M,將其轉化爲N進制數,其中2<=N<=16,其中N爲32爲整型數;java

輸入:M N,如7 2app

輸出轉化結果:111ui

注意點:考慮負數的狀況,記得添加負號(其實直接添加負號這個辦法,我以爲有點不靠譜,可是系統居然A了,有知道這個怎麼處理的,能夠評論下,這樣處理爲何能過,還有還能夠怎麼處理,謝謝你們!!);spa

思路:1. 使用一個輔助棧來存放M對N取餘的結果(M%N);code

     2. 處理餘數<=9和>9兩種狀況,由於按照16進制,>9的數用ABCDEF取代blog

     3. 再更新取餘後M的取值:M=M/N;class

     4. 循環處理2,3兩個步驟,直到M=0;import

   5. 處理最終結果,出棧,直到棧爲空;循環

代碼以下:im

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());
    }
}
相關文章
相關標籤/搜索