【发布时间】:2014-11-20 05:23:53
【问题描述】:
我正在发明一种算法,我在其中创建了一个新数字“z”(实际上不是z),并且我将它与一起使用旧数字(0123456789)和我的新数字系列看起来像这样(0123456789z)但这里的问题是如何编写一个程序,将“19 + 1”作为“z”和“z + 1”作为“20”。
【问题讨论】:
我正在发明一种算法,我在其中创建了一个新数字“z”(实际上不是z),并且我将它与一起使用旧数字(0123456789)和我的新数字系列看起来像这样(0123456789z)但这里的问题是如何编写一个程序,将“19 + 1”作为“z”和“z + 1”作为“20”。
【问题讨论】:
尝试类似的方法,但如果最后一个字符达到 0,您必须实施额外的编码来检查参数并增加倒数第二个字符。
这是基本逻辑:
private const string DIGITS = "0123456789z";
static void Main(string[] args)
{
Console.WriteLine(NextValue("9"));
Console.ReadKey();
}
private static string NextValue(string value)
{
char nextChar = '\0';
if(!string.IsNullOrEmpty(value))
{
char lastChar = value[value.Length - 1];
int nextCharIndex = DIGITS.IndexOf(lastChar) + 1;
if (nextCharIndex > DIGITS.Length)
nextChar = DIGITS[0];
else
nextChar = DIGITS[nextCharIndex];
}
return nextChar.ToString();
}
【讨论】:
在你编辑了你的问题之后,我想你想要的是这个
public int incrementNumber(string number)
{
var lastNumber = int.Parse(number.Last());
return (number.Length - 1) + ((lastNumber + 1) % 10).ToString();
}
% 10 或 Mod 10 提醒数字除以 10。因此,如果您传入 9,它将递增到 10,然后回绕到 0。当您传入 5 时,它将递增到 6 并保持为 6,因为它不能被 10 整除。
【讨论】:
这可能没有经过优化,但如果您允许 +1 递增,则可以使用。
public static string NextValue(string Counting)
{
int nextVal;
if(int.TryParse(Counting, out nextVal))
{
return (nextVal + 1).ToString();
}
else
{
char[] numbers = Counting.ToCharArray();
StringBuilder incremented = new StringBuilder();
foreach (char digit in numbers.Reverse())
{
if (digit == 'z')
{
incremented.Append("0");
}
else if (int.TryParse(digit.ToString(), out nextVal))
{
nextVal = nextVal + 1;
if (nextVal == 10)
{
incremented.Append("z");
}
else
{
incremented.Append(nextVal.ToString());
}
incremented.Append(string.Concat(numbers.Reverse().Skip(incremented.Length)));
break;
}
else
{
//Invalid character in number except for z
return string.Empty;
}
}
if (incremented[incremented.Length - 1] == '0')
incremented.Append("1");
return Reverse(incremented.ToString());
}
}
public static string Reverse(string s)
{
char[] charArray = s.ToCharArray();
Array.Reverse(charArray);
return new string(charArray);
}
【讨论】: