首页 新闻 会员 周边 捐助

C# 算法,输入一个数字,返回一串字母

0
悬赏园豆:5 [已解决问题] 解决于 2019-09-11 16:29

C# 输入1 返回A,输入2 返回B,输入26返回Z,输入27返回AA,输入28返回AB...以此类推,输入200,返回的字母是多少呢?随便输入一个数字,返回的字母是多少呢?
怎样用一个小算法来实现这个需求呢?

C#
gyangjing的主页 gyangjing | 初学一级 | 园豆:4
提问于:2019-09-11 15:14
< >
分享
最佳答案
0

这个微妙的需求,大哥你怕不是在做数字转Excel列头编号哦。。。
这个算法其实很简单,你就简单的想象成是一个二十六进制转换。但这又不是单纯的二十六进制转换,因为它没有0,需要对0单独处理,代码如下:

static void Main(string[] args)
{
    Console.Write ("Please enter an integer greater than 0: ");
    int number = int.Parse(Console.ReadLine());

    Stack<char> stack = new Stack<char>();
    string chars = "ZABCDEFGHIJKLMNOPQRSTUVWXY";
    while (number > 0)
    {
        int quotient = number % chars.Length;
        number = number / chars.Length;

        stack.Push(chars[quotient]);
        if (quotient == 0)
            number--;
    }
            
    Console.WriteLine($"result = {new string(stack.ToArray())}");
    Console.ReadKey();
}
收获园豆:5
小柊 | 菜鸟二级 |园豆:214 | 2019-09-11 16:05

哈哈哈,你怎么知道我再做数字转换成Excel表头的。。。

gyangjing | 园豆:4 (初学一级) | 2019-09-11 16:17

@gyangjing: 因为我就做过。。。。。看着描述眼熟的很

小柊 | 园豆:214 (菜鸟二级) | 2019-09-11 16:22

@小柊: 我勒个去,这都能被看出来。。。我确实是在做这样的一个功能,哈哈哈,你的方法非常实用,谢谢了!给你满分!

gyangjing | 园豆:4 (初学一级) | 2019-09-11 16:28
其他回答(4)
0

连个需求都说不明白,怎么才能写写算法

哈佛 | 园豆:202 (菜鸟二级) | 2019-09-11 15:52

不会看题目吗?

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2019-09-11 16:15
0

这其实是个进制转换问题吧,就是把10进制数转换为26进制数而已。比如27=1X26+1,就是AA;200 = 7X26 + 18,就是GR。这样一分析,编程就很简单了,和10进制转2进制一模一样。

另外,问主,你的问题标题错了,不是“返回一个字母”吧,应该是返回一串字母

会长 | 园豆:12463 (专家六级) | 2019-09-11 15:53

哈哈哈,写错了,就是返回一串字母。。。

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2019-09-11 16:15
0
        static void Main(string[] args)
        {
            while (true)
            {
                var input = Console.ReadLine();
                int.TryParse(input, out int i);
                ConvertLetter(i);
                Console.WriteLine();
            }
        }
        static void ConvertLetter(int n)
        {
             var i = --n % 26;
            if (n > -1)
            {
                n /= 26;
                ConvertLetter(n);
                Console.Write((char)(i + 65));
            }
        }
cc1027cc | 园豆:242 (菜鸟二级) | 2019-09-11 16:25

你这个方法我试过了,貌似不行啊,我输入29,应该返回的是AC,但是你这个方法返回的是“\0”

支持(0) 反对(0) gyangjing | 园豆:4 (初学一级) | 2019-09-11 16:34

@gyangjing: 我测试过,没问题啊。我.net core 建的项目

支持(0) 反对(0) cc1027cc | 园豆:242 (菜鸟二级) | 2019-09-11 16:35
0

public static string IndexToColumn(int index)
{
if (index <= 0)
{
throw new Exception("Invalid parameter");
}
index--;
string column = string.Empty;
do
{
if (column.Length > 0)
{
index--;
}
column = ((char)(index % 26 + (int)'A')).ToString() + column;
index = (int)((index - index % 26) / 26);
} while (index > 0);
return column;
}

彭小立 | 园豆:634 (小虾三级) | 2019-09-23 14:47
清除回答草稿
   您需要登录以后才能回答,未注册用户请先注册