C# 输入1 返回A,输入2 返回B,输入26返回Z,输入27返回AA,输入28返回AB...以此类推,输入200,返回的字母是多少呢?随便输入一个数字,返回的字母是多少呢?
怎样用一个小算法来实现这个需求呢?
这个微妙的需求,大哥你怕不是在做数字转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();
}
哈哈哈,你怎么知道我再做数字转换成Excel表头的。。。
@gyangjing: 因为我就做过。。。。。看着描述眼熟的很
@小柊: 我勒个去,这都能被看出来。。。我确实是在做这样的一个功能,哈哈哈,你的方法非常实用,谢谢了!给你满分!
连个需求都说不明白,怎么才能写写算法
不会看题目吗?
这其实是个进制转换问题吧,就是把10进制数转换为26进制数而已。比如27=1X26+1,就是AA;200 = 7X26 + 18,就是GR。这样一分析,编程就很简单了,和10进制转2进制一模一样。
另外,问主,你的问题标题错了,不是“返回一个字母”吧,应该是返回一串字母
哈哈哈,写错了,就是返回一串字母。。。
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));
}
}
你这个方法我试过了,貌似不行啊,我输入29,应该返回的是AC,但是你这个方法返回的是“\0”
@gyangjing: 我测试过,没问题啊。我.net core 建的项目
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;
}