2
我在C#中自定義數字系統都按以下要求:自定義數字系統在C#
A - 1
B - 2
...
Z - 26
AA - 27
AB - 28
我做了從任意的字符串轉換爲數字這樣的功能:
private const int Min = 'A';
private const int Max = 'Z';
private const int Base = Max - Min + 1;
private static int GetCharValue(char c)
{
if (c < Min || c > Max)
throw new ArgumentOutOfRangeException(nameof(c), c, $"Character needs to be between '{Min}' and '{Max}', was '{c}'.");
return c - Min + 1;
}
public static int GetStringValue(string s)
{
char[] chars = s.ToCharArray();
int[] values = new int[chars.Length];
for (var i = 0; i < chars.Length; i++)
{
values[i] = GetCharValue(chars[i]);
}
int position = 1;
int value = 0;
for (var i = values.Length - 1; i >= 0; i--)
{
value += position * values[i];
position *= Base;
}
return value;
}
我測試過其上工作長達AAA
(不嚴謹,只是一掠而過打印它們所有的輸出)。但是,我不能爲我的生活弄清楚如何編寫反向函數。換句話說,我需要1
回到A
,26
返回Z
和27
返回AA
。 「問題」是這個數字系統沒有0,所以它不容易轉換到任何基地。例如,如果A
爲0,那麼AA
也將爲0,但事實並非如此。那麼我該如何解決這個問題?
...或者'AAA'是'703'? –
它看起來像你試圖創建一個base_n數字系統......但我不認爲'AA'應該代表你認爲它的作用 – Kritner
「問題」是你的數字系統確實有一個零,但它不一致。這是一個奇怪的不是真正的定位系統。在'AA'中,第一個'A'是一個,而第二個'A'是零。 「AAA」是指011,010,100,101,110 ...?實際需求是什麼,只是客戶的一些模糊的期望,並不真正知道他想要什麼?還是你想複製Excel的座標系? – Luaan