• 进制转换


    问题:将m进制num转换为n进制 (2 <= m,n <= 62) ? 
    总体思路是:先将m进制转换为10进制,再将10进制转为n进制。

    1、m进制数num转为10进制 

    从低位到高位按权展开即可。 
    例如:8进制1356 转为10进制 
    6*8^0 + 5 * 8^1 + 3 * 8^2 + 1 * 8^3 = 750

    2、10进制转为n进制

    采用除留取余,逆序排列。 
    例如:10进制65036转为16进制 
    65036 除 16,余数 12(C),商4064 
    4064 除 16,余数 0(0),商254 
    254 除 16,余数 14(E),商15 
    15除16,余数 15(F),商0,结束 
    得16进制为 FE0C

    import java.util.Scanner;
    import java.util.Stack;
    
    public class ZhuanHuan {
    
        //这里只写出了最多16进制时用到的字符,如果更大的进制,可以再往后添加
        private static char[] array = "0123456789abcdef".toCharArray();
        private static String numStr = "0123456789abcdef";
    
        // 10进制转为其他进制,除留取余,逆序排列
        //number待转换的数,转为N进制
        public static String _10_to_N(long number, int N) {
            Long numb = number;
            Stack<Character> stack = new Stack<Character>();
            StringBuilder result = new StringBuilder(0);//结果用一个可变字符串表示
            while (numb != 0) {
                stack.add(array[new Long((numb % N)).intValue()]);
                numb = numb / N;
            }
            for (; !stack.isEmpty();) {
                result.append(stack.pop());
            }
            return result.length() == 0 ? "0" : result.toString();
    
        }
    
        // 其他进制转为10进制,按权展开,N进制转为10进制
        //传入的待转换数为字符串形式
        public static long N_to_10(String number, int N) {
            char ch[] = number.toCharArray();
            int len = ch.length;
            long result = 0;
            if (N == 10) {
                return Long.parseLong(number);
            }
            long base = 1;
            for (int i = len - 1; i >= 0; i--) {
                int index = numStr.indexOf(ch[i]);//把待转换的每一位的字符,找到在numStr中的坐标即为其对应的数值
                result += index * base;
                base *= N;
            }
    
            return result;
        }
    
        public static void main(String[] args) {
    
            Scanner in = new Scanner(System.in);
            while (in.hasNext()) {
                int src = in.nextInt();//原数据的进制
                int aim = in.nextInt();//转为多少进制
                String intStr = in.next();//待转换数据
    
                Long tmp = N_to_10(intStr, src);
                String tmp2 = _10_to_N(tmp, aim);
    
                String newStr = tmp2.replaceFirst("^0*", "");
                System.out.println(newStr);
            }
        }
    }

    https://blog.csdn.net/u012027907/article/details/77683813

  • 相关阅读:
    在客户端判断上传文件大小(不支持opera)
    javascript冒泡排序(javascript算法学习)
    提高js性能方法(让js只判断一次)
    ie8本地预览报错的解决
    负载均衡获取客户端IP
    遍历变量里面所有的属性
    HttpWebrequest的使用
    C#调用EnyimMemcached
    MySQL国内省市直辖区
    Log4Net使用
  • 原文地址:https://www.cnblogs.com/xdyixia/p/9320957.html
Copyright © 2020-2023  润新知