using System.Collections.Generic;
public static void Main()
Console.WriteLine(NumberConversion.Convert(2, 10, "10101001"));
Console.WriteLine(NumberConversion.Convert(10, 2, "256"));
Console.WriteLine(NumberConversion.Convert(10, 16, "28"));
Console.WriteLine(NumberConversion.Convert(10, 4, "1034"));
public class NumberConversion {
private static readonly char[] alpha = "ABCDEFGHIJKLMNOPQRSTUVWXYZ".ToCharArray();
public static string Convert(uint baseSystem, uint destinationSystem, string number) =>
Convert(System.Convert.ToInt32(baseSystem), System.Convert.ToInt32(destinationSystem), number);
private static string Convert(int baseSystem, int destinationSystem, string number) {
if(baseSystem == 0 || destinationSystem == 0)
throw new ArgumentException("Number System connot be zero");
if(baseSystem == destinationSystem)
return number.ToString();
decimalNumber = ConvertToDecimal(baseSystem, number);
decimalNumber = System.Convert.ToInt32(number);
if(destinationSystem != 10)
return ConvertFromDecimalToAny(decimalNumber, destinationSystem);
return decimalNumber.ToString();
private static long ConvertToDecimal(int baseSystem, string number) {
string numbers = number.ToString();
long[] heavyNumbers = new long[numbers.Length];
int p = numbers.Length - 1;
while(i < numbers.Length) {
heavyNumbers[i] = System.Convert.ToInt64(System.Math.Pow(baseSystem, p)) * System.Convert.ToInt64(numbers[i].ToString());
for(int s = 0; s < heavyNumbers.Length; s++) {
decimalNumber += heavyNumbers[s];
private static string ConvertFromDecimalToAny(long decimalNumber, int destinationSystem) {
List<long> rest = new List<long>();
while(decimalNumber != 0) {
rest.Add(decimalNumber % destinationSystem);
decimalNumber = decimalNumber / destinationSystem;
string[] results = new string[rest.Count];
for(int i = 0; i < rest.Count; i++) {
results[i] = alpha[rest[i] - 10].ToString();
results[i] = rest[i].ToString();
for(int i = rest.Count - 1; i >= 0; i--) {