2021-07-27
zelder
2021-07-27
27/07
2021

Перевод числа в другую систему счисления.


public void Main()
{
    var num = 9999;
    var outStr = ConvertTo(num, 36);
    Console.WriteLine($"Перевод числа '{num}' в N систему счисления: {outStr}");
}


/// <summary>
/// Перевод числа (положительного) в систему счисления.
/// </summary>
/// <param name="num">Число для перевода.</param>
/// <param name="targetNotation">Система счисления от 10 до 36.</param>
/// <returns></returns>
private String ConvertTo(Int32 num, Int32 targetNotation)
{
    if (num <= 0) return "0";
    List<Int32> ret = new List<Int32>();
    var number = num;
    while (number != 0)
    {
        ret.Add((number % targetNotation));
        number /= targetNotation;
    }
    ret.Reverse();
    var outStr = "";
    foreach (var r in ret)
    {
        outStr += GetDigitSymbol(r);
    }
    return outStr;
}
private String GetDigitSymbol(Int32 digit)
{
    if (digit < 10) return digit.ToString();
    switch(digit)
    {
        case 10: return "A";
        case 11: return "B";
        case 12: return "C";
        case 13: return "D";
        case 14: return "E";
        case 15: return "F";
        case 16: return "G";
        case 17: return "H";
        case 18: return "I";
        case 19: return "J";
        case 20: return "K";
        case 21: return "L";
        case 22: return "M";
        case 23: return "N";
        case 24: return "O";
        case 25: return "P";
        case 26: return "Q";
        case 27: return "R";
        case 28: return "S";
        case 29: return "T";
        case 30: return "U";
        case 31: return "V";
        case 32: return "W";
        case 33: return "X";
        case 34: return "Y";
        case 35: return "Z";
        //! .. можно расширить, например, нижним регистром (если в конечном использовании регистр учитывается)
// или можно добавить рандомности, выдавая то верхний, то нижний регистр
    }
    return "0";
}


В системе счисления 36, число ZZZ в переводе в десятичную = 46655,
а число ZZ1295



.