有人可以帮助解决以下情况的逻辑吗?
**Input -> Output**
00000 --> 00001
00009 --> 0000A
0000Z --> 00010
..
..
0002Z --> 00030
00039 --> 0003A
有什么建议吗?
EDIT 谢谢大家的建议。 :)这是我尝试过的,它有效,但不确定是否可以在某些条件下中断? :/
public static void Main(string[] args)
{
string number = "0001Z";
var result = Increment(number);
}
private static String Increment(String number)
{
String chars = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
char lastChar = number[number.Length - 1];
string fragment = number.Substring(0, number.Length - 1);
if (chars.IndexOf(lastChar) < 35)
{
lastChar = chars[chars.IndexOf(lastChar) + 1];
string nextNumber = fragment + lastChar;
return nextNumber;
}
return Increment(fragment) + '0';
}
PS:Increment an index that uses numbers and characters (aka Base36 numbers) - 这是我从中获得的,所以可能是重复的问题..抱歉。
答案 0 :(得分:0)
我有几种方法可以将整数转换为不同的基数。我相信他们可能会得到改善。但他们可能会让你开始。因此,将您的基数36“数字”转换为int,递增1,然后转换回基数36.此方法使用递归,这可能不是必需的。我有兴趣知道是否有更有效的方法。
除0-9和A-Z
外,这些方法不假设其他字符void Main()
{
string input = "0000Z";
int value = baseToInt(input, 36);
value++;
string output = intToBase(value, 36).PadLeft(5, '0');
Console.WriteLine("Input: {0}", input);
Console.WriteLine("Output: {0}", output);
}
public string intToBase(int input, int @base)
{
var digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (@base < 2 || @base > 36)
{
throw new ArgumentOutOfRangeException("base", "Must specify a base between 2 and 36, inclusive");
}
if (input < @base && input >= 0)
{
return digits[input].ToString();
}
else
{
return intToBase(input / @base, @base) + digits[input % @base].ToString();
}
}
public int baseToInt(string input, int @base)
{
var digits = "0123456789ABCDEFGHIJKLMNOPQRSTUVWXYZ";
if (@base < 2 || @base > 36)
{
throw new ArgumentOutOfRangeException("base", "Must specify a base between 2 and 36, inclusive");
}
var digitsInBase = digits.Substring(0, @base);
if (input.Any(c => !digitsInBase.Contains(c)))
{
throw new ArgumentOutOfRangeException("input", string.Format("Input is not a valid base {0} number", @base));
}
return (int)input.Select((c, i) => Math.Pow(@base, input.Length - (i + 1)) * digitsInBase.IndexOf(c)).Sum();
}
输出:
输入:0000Z
输出:00010