我发明了一种算法,其中创建了一个新的数字,即" z" (实际上不是z)我正在使用它使用旧数字(0123456789)和我的新系列数字看起来像这样(0123456789z)但这里的问题是如何编写一个给出" 19 + 1" as" z"和" z + 1" as" 20"。
答案 0 :(得分:0)
在您编辑问题后,我认为您所追求的是
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 :(得分:0)
这可能没有优化,但如果允许+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);
}
答案 2 :(得分:0)
尝试类似这样的事情,但是如果最后一个字符达到 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();
}