输入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