C#实现进制转换(2-64)

 

输入3行数据m,n,s。
请把m进制的数s转换为n进制的数显示输出


 

  1 using System;
  2 
  3 namespace _173
  4 {
  5     /*
  6      * 2-62范围内任意进制转换
  7      */
  8     class Program
  9     {
 10         /*
 11          * 任意进制数转换成十进制数
 12          */
 13         public static string ArbitrarySystemToDecimal(string input_ArbitrarySystem, int old_radix, int radix)
 14         {
 15             char[] a = input_ArbitrarySystem.ToCharArray();
 16             int[] i_a = new int[a.Length];
 17 
 18             long ans = 0;
 19             long k = 1;
 20 
 21             for (int i = 0; i < a.Length; i++)
 22             {
 23                 int int_a = System.Convert.ToInt32(a[i]);
 24                 //0-9的ASCII码 48-57
 25                 if (int_a >= 48 && int_a <= 57)
 26                 {
 27                     i_a[i] = int_a-48;
 28                 }
 29                 //A-Zd的ASCII码 65-90
 30                 else if (int_a >= 65 && int_a <= 90)
 31                 {
 32                     i_a[i] = int_a-65+36;
 33                 }
 34                 else
 35                 {
 36                     i_a[i] = int_a - 97 + 10;
 37                 }
 38                 
 39             }
 40 
 41             for(int i = i_a.Length-1; i >=0; i--)
 42             {
 43                 if (i == i_a.Length-1)
 44                 {
 45                     ans = i_a[i];
 46                 }
 47                 else
 48                 {
 49                     for (int j = 0; j < a.Length-i-1; j++)
 50                     {
 51                         k *= old_radix;
 52                     }
 53                     ans += (i_a[i] * k);
 54                     k = 1;
 55                 }
 56             }
 57             string str_ans = System.Convert.ToString(ans);
 58             return str_ans;
 59 
 60         }
 61 
 62         //decimalNumber输入的数据 ,radix进制 
 63         /*
 64          * 十进制转换成任意进制【2-64】
 65          */
 66         public static string DecimalToArbitrarySystem(long decimalNumber, int radix)
 67         {
 68             const int BitsInLong = 128;
 69             const string Digits = "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ-_";
 70 
 71             /*if (radix < 2 || radix > Digits.Length)
 72             {
 73                 throw new ArgumentException("The radix must be >= 2 and <= " + Digits.Length.ToString());
 74             }
 75                     
 76             if (decimalNumber == 0)
 77             {
 78                 return "0";
 79             }*/
 80                     
 81 
 82             int index = BitsInLong - 1;
 83             long currentNumber = Math.Abs(decimalNumber);//对输入的数据取绝对值 
 84             char[] charArray = new char[BitsInLong];
 85 
 86             while (currentNumber != 0)
 87             {
 88                 int remainder = (int)(currentNumber % radix);
 89                 charArray[index--] = Digits[remainder];
 90                 currentNumber = currentNumber / radix;
 91             }
 92 
 93             string result = new String(charArray, index + 1, BitsInLong - index - 1);
 94             if (decimalNumber < 0)
 95             {
 96                 result = "-" + result;
 97             }
 98 
 99             return result;
100         }
101 
102         
103 
104         static void Main(string[] args)
105         {
106             /*
107              * 定义数s,进制为m,将其转换为n进制的数
108              * 输入格式 原进制m,新进制n,原进制数s
109              */           
110             int m = int.Parse(Console.ReadLine());
111             int n = int.Parse(Console.ReadLine());
112             /*
113              * 输入原进制数
114              */
115             string input_s = Console.ReadLine();
116             if (m != 10)
117             {
118                 //如果输入的进制不是10进制的数              
119                 if (n == 10)
120                 {
121                     //如果题目要求转换成10进制数
122                     Console.WriteLine(ArbitrarySystemToDecimal(input_s, m, n));
123                 }
124                 else
125                 {
126                     //如果题目不要求转换成10进制数
127                     //用str_s存转换成10进制的数
128                     string str_s = ArbitrarySystemToDecimal(input_s, m, n);
129                     long s = long.Parse(str_s);
130                     Console.WriteLine(DecimalToArbitrarySystem(s, n));
131                 }
132             }
133             else
134             {
135                 //如果输入的是10进制数
136                 long s = long.Parse(input_s);
137                 Console.WriteLine(DecimalToArbitrarySystem(s, n));
138             }   
139         }
140     }
141 }

 


10进制转换其他进制代码参考 https://cloud.tencent.com/developer/article/1730078

上一篇:C++radix sort基数排序的实现算法之二(附完整源码)


下一篇:JDK源码笔记01 Integer