【プログラミング】n進数の変換

n進数の変換

Excelの列について、アルファベット⇔数字の変換を実施しようとn進数の変換を実施しようとしたら、いろいろ忘れていたので復習。

10進数からn進数の変換

基数nで「すだれ算」を行い、余りを下から足していけば完了。
基数で割る⇒桁を1つ下げる
余り⇒1番したの位の数字
下から足していけばn進数に変換される。

n進数から10進数の変換

基数の桁を考慮して重み付けした値を加算していく。

static class Utility
{
    private static readonly int AlphabetRadix = 26; //26進数
    
    internal static string NumberToAlphabet(int number)
    {
        var alphabet = "";
        do
        {
            int remainder = (number - 1) % AlphabetRadix;
            alphabet = (char)('A' + remainder) + alphabet;
            number = (number - 1) / AlphabetRadix;
        } while (number > 0 );
        return alphabet;
    }
    
    internal static int AlphabetToNumber(string alphabet)
    {
        var number = 0;
        var numberOfDigits = alphabet.Length - 1;
        for (int i = 0; i < alphabet.Length; ++i)
        {
            var exp = System.Math.Pow(AlphabetRadix, numberOfDigits--);
            var result = (int)(alphabet[i] - 'A') + 1;
            number += result * (int)exp;
        }
        return number;
    }
}