我正在尝试在C#中开发一个例程,该例程将获取给定的输入整数并根据预定义的可能字符集返回6个字符的字母数字字符串。
可能使用的字符是:
“0123456789ABCDEFGHJKLMNPQRSTUVWXYZ”(请注意字母“I”和“O”不在集合中。)
因此,如果输入为1,则输出应为“000001”,输入9将输出“000009”,输入10将输出“00000A”,输入12345将输出“000AP3”,依此类推。 / p>
我很难找到解决这个问题的优雅方案。我知道我必须努力接近这一点,所以我正在寻求帮助。
谢谢!
答案 0 :(得分:7)
int value = 12345;
string alphabet = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
var stack = new Stack<char>();
while (value > 0)
{
stack.Push(alphabet[value % alphabet.Length]);
value /= alphabet.Length;
}
string output = new string(stack.ToArray()).PadLeft(6, '0');
答案 1 :(得分:1)
直接解决方案只是迭代地将输入值除以 N (字符集的大小),并每次取余数来索引字符集,并构建输出字符串逐个字符。
答案 2 :(得分:0)
internal class Program {
private static void Main(string[] args) {
int value = 38;
const string alphabet = "0123456789ABCDEFGHJKLMNPQRSTUVWXYZ";
string result = ToBase(value, alphabet);
Console.WriteLine(result);
}
private static string ToBase(int value, string alphabet) {
if (value == 0) return alphabet[0].ToString();
var result = new StringBuilder();
while (value > 0) {
int digit = value % alphabet.Length;
value = (value - digit) / alphabet.Length;
result.Insert(0, alphabet[digit]);
}
return result.ToString();
}
}
你做零填充
答案 3 :(得分:0)
LukeH修改了将 Alphanemuric生成为数字而反之亦然
int value = 12345;
string alphabet = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
var stack = new Stack<char>();
while (value > 0)
{
int index = value % alphabet.Length;
stack.Push(alphabet[index]);
value /= alphabet.Length;
}
string output = new string(stack.ToArray()).PadLeft(6, '0');
double intNumber = 0;
int charPos = 0;
for (var i = output.Length-1; i >=0;i--)
{
int val = output[i];
if (val >= 48 && val <= 57)
intNumber += (val - 48) * (Math.Pow(36, charPos++));
else if (val >= 65 && val <= 90)
intNumber += (val - 55) * (Math.Pow(36, charPos++));
}