題目:給定一個十進制數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()); } }