校招准备系列:每天一道算法题(8)-进制转换
题目:给定一个十进制数M,将其转化为N进制数,其中2<=N<=16,其中N为32为整型数;
输入:M N,如7 2
输出转化结果:111
思路:1. 使用一个辅助栈来存放M对N取余的结果(M%N);
2. 处理余数<=9和>9两种情况,因为按照16进制,>9的数用ABCDEF取代,所以使用HashMap来存放字符串
3. 再更新取余后M的取值:M=M/N;
4. 循环处理2,3两个步骤,直到M=0;
5. 处理最终结果,出栈,直到栈为空;
import java.util.*;
public class Main{
public static void main(String args[]){
Scanner scan = new Scanner(System.in);
int m = scan.nextInt();
int n = scan.nextInt();
change(m,n);
}
public static void change(int m,int n){
if(n == 10){
System.out.print(m);
}
HashMap<Integer,String> map = new HashMap<>(); // 创建一个map对象,存储对应的字符
map.put(10, "A");
map.put(11, "B");
map.put(12, "C");
map.put(13, "D");
map.put(14, "E");
map.put(15, "F");
Stack stacks = new Stack(); //创建一个栈 存放取余的结果
while(m!=0){
int mods = m%n;
stacks.push((mods<=9?mods:map.get(mods)));
m = m/n;
}
boolean flag = true;
// 输出
if(!stacks.isEmpty()){
Enumeration items = stacks.elements();
while (items.hasMoreElements()) {
if(m<0){
System.out.print(stacks.pop());
if(flag){
System.out.print("-");
flag = false;
}
}else{
System.out.print(stacks.pop());
}
}
}
}
}
您的代码已保存
答案错误:您提交的程序没有通过所有的测试用例
case通过率为60.00%
m为负数的情况 不知道怎么处理 望大家指教。。。。。