如何在网络中将 10 进制数转换为 3 进制数(特例)

How to convert a base 10-number to 3-base in net (Special case)

我正在寻找 C# 中的例程,它在输入数字时会提供以下输出: 0 - 一个 1 - 乙 2 - 丙 3 - AA 4 - AB 5 - 空调 6 - 文学学士 7 - BB 8 - 公元前 9 - 加州 10 - 断路器 11 - 抄送 12 - AAA 13 - 等等

我使用的是字母,以免与零混淆。 我看过其他例程,但他们会给我 BA 的值 3 而不是 AA。

注意:我发现的其他例程是 Quickest way to convert a base 10 number to any base in .NET? and http://www.drdobbs.com/architecture-and-design/convert-from-long-to-any-number-base-in/228701167,但正如我所说,它们不会给我提供我正在寻找的东西。

系统之间的转换是基本的编程任务,逻辑与其他系统(例如十六进制或二进制)没有区别。请找到以下代码:

//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:一开始没仔细看,看错了。我在之前的解决方案中添加了两行标有 "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.

基于 中的代码,以下应该有效:

private string GetWeirdBase3Value(int input)
{
    int dividend = input+1;
    string output = String.Empty;
    int modulo;

    while (dividend > 0)
    {
        modulo = (dividend - 1) % 3;
        output = Convert.ToChar('A' + modulo).ToString() + output;
        dividend = (int)((dividend - modulo) / 3);
    } 

    return output;
}

代码应该很容易阅读。它本质上是一个字符一个字符地迭代计算,直到被除数减少到0。