进制转换问题

来源:互联网 发布:怎样才能做淘宝客推广 编辑:程序博客网 时间:2024/05/22 03:10

  /*        * 问题描述        给定n个十六进制正整数,输出它们对应的八进制数。        输入格式            输入的第一行为一个正整数n (1<=n<=10)。            接下来n行,每行一个由0~9、大写字母A~F组成的字符串,表示要转换的十六进制正整数,每个十六进制数长度不超过100000。        输出格式            输出n行,每行为输入对应的八进制正整数。        注意            输入的十六进制数不会有前导0,比如012A。            输出的八进制数也不能有前导0。        样例输入            2                39                123ABC        样例输出                71                4435274            */using System;using System.Text;class Program {            string input = null;            string pattern = "^(\\d|[a-fA-F])+$";        loop:            Console.Write("\n请输入一个十六进制数:");            input = Console.ReadLine();            if (!Regex.IsMatch(input, pattern)) goto loop;            input = Regex.Replace(input, "^0+(\\w+)$", "$1").ToUpper();            MyConversion myCvs = new MyConversion();            string result = myCvs.ToOther(myCvs.ToDecimal(16, input), 8);            Console.WriteLine("***转换成八进制是:" + result);            goto loop;}public class MyConversion{    // 使用查表法,一一对应    private readonly char[] data = { '0', '1', '2', '3', '4', '5', '6', '7', '8', '9', 'A', 'B', 'C', 'D', 'E', 'F' };    // 定义字符缓冲区,存放转换后的字符串    private StringBuilder sb = null;    /**     * 10进制数字转相应进制     *      * @param num     *            待转换的十进制整数     * @param shift     *            要转换的相应进制2,8...     */    public String ToOther(int num, int shift)    {        sb = new StringBuilder(10);        do        {            int n = num % shift;            //sb.Insert(0, n > 9 ? (char)(n + 55) + "" : n + "");            sb.Insert(0, data[n]);            num /= shift;   //对应的右移位更高效 >> 1 >> 3 >> 4        } while (num > 0);        return sb.ToString();    }    public int ToDecimal(int shift, string strNum)    {        int sum = 0;        int len = strNum.Length - 1;        for (int i = 0; i <= len; i++)        {            char c = strNum[i];            int num = c >= 'A' ? c - 55 : c - 48;            sum += ((int)Math.Pow(shift, len - i) * num);        }        return sum;    }}下面附上一段java实现的最简单算法/*  任意进制间的转换  n 进制转 m 进制    String s = "2001201102";  3进制转为5进制*/public class T1{    public static void main(String[] args)    {        String s = "2001201102";        int n = 0;        for(int i=0; i<s.length(); i++){            n = n*3 + (s.charAt(i)-'0');        }                System.out.println(n);                String s2 = "";        for(;;){            if(n==0) break;            s2 = (n%5) + s2;            n = n / 5;        }                System.out.println(s2);    }}


0 0
原创粉丝点击