校招准备系列:每天一道算法题(8)-进制转换

来源:互联网 发布:网络禁书大合集 编辑:程序博客网 时间:2024/05/29 23:47

校招准备系列:每天一道算法题(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为负数的情况 不知道怎么处理 望大家指教。。。。。
阅读全文
0 0