首页 > 代码库 > 给定一个十进制数,将其转化为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年滴滴笔试题
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。