系统之间的转换是基本的编程任务,逻辑与其他系统(例如十六进制或二进制)没有区别。请找到以下代码:
//here you choose what number should be used to convert, you wanted 3, so I assigned this value here
int systemNumber = 3;
//pick number to convert (you can feed text box value here)
int numberToParse = 5;
// Note below
numberToParse++;
string convertedNumber = "";
List<char> letters = new List<char>{ 'A', 'B', 'C' };
//basic algorithm for converting numbers between systems
while(numberToParse > 0)
{
// Note below
numberToParse--;
convertedNumber = letters[numberToParse % systemNumber] + convertedNumber;
//append corresponding letter to our "number"
numberToParse = (int)Math.Floor((decimal)numberToParse / systemNumber);
}
//show converted number
MessageBox.Show(convertedNumber);
注意:我一开始没有仔细阅读并弄错了。我在之前的解决方案中添加了两行标有“Note below”的行:解析数字的递增和递减。递减使A
(为零,因此在数字的开头省略)被视为相关的前导数字。但是这样一来,可以转换的数字被移位并从 1 开始。为了弥补这一点,我们需要在开始时增加我们的数字。
另外,如果你想使用类似的其他系统,你必须用字母扩展列表。现在我们有了 A、B 和 C,因为你想要基于 3 的系统。事实上,你总是可以使用完整的字母表:
List<char> letters = new List<char> {'A','B','C', 'D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
只有改变systemNumber
。