У меня возникают проблемы с переопределением значения в массив символов. Ниже мой код (незаконченный решение, чтобы найти следующий наименьший палиндром):Переназначение значения массиву символов не работает
public int nextSmallestPalindrome(int number)
{
string numberString = number.ToString();
// Case 1: Palindrome is all 9s
for (int i = 0; i < numberString.Length; i++)
{
if (numberString[i] != '9')
{
break;
}
int result = number + 2;
return result;
}
// Case 2: Is a palindrome
int high = numberString.Length - 1;
int low = 0;
bool isPalindrome = true;
for (low = 0; low <= high; low++, high--)
{
if (numberString[low] != numberString[high])
{
isPalindrome = false;
break;
}
}
char[] array = numberString.ToCharArray();
if (isPalindrome == true)
{
// While the middle character is 9
while (numberString[high] == '9' || numberString[low] == '9')
{
array[high] = '0';
array[low] = '0';
high++;
low--;
}
int replacedvalue1 = (int)Char.GetNumericValue(numberString[high]) + 1;
int replacedvalue2 = (int)Char.GetNumericValue(numberString[low]) + 1;
StringBuilder result = new StringBuilder(new string(array));
if (high == low)
{
result[high] = (char)replacedvalue1;
}
else
{
Console.WriteLine(result.ToString());
result[high] = (char)replacedvalue1;
Console.WriteLine(result.ToString());
result[low] = (char)replacedvalue2;
}
return Int32.Parse(result.ToString());
}
else return -1;
}
Основные трассы класса:
Console.WriteLine(nextSmallestPalindrome(1001));
Это возвращает 1001, затем 101, а затем дает FormatException при возвращении Int32.Parse (result.ToString()); заявление.
Я очень смущен, так как я считаю, что «результат» должен быть 1101 после того, как я назначу результат [высокий] = (char) replacevalue1 ;. Печать replacevalue1 дает мне «1», как ожидалось. Тем не менее, отладка строки по строке показывает, что «1001» в конце превращается в «1 1», что означает странные символы.
Что может быть не так?
Thanks
Это лучше всего решить с помощью отладчика. Пожалуйста, отлаживайте его. – Jagannath
Я не понимаю ваш алгоритм. Вы можете это описать? Что такое высокое, низкое? Почему вы вообще что-то заменяете? Какой результат вы ожидаете? Покажите несколько примеров. –
Пока мой алгоритм проверяет первый случай, если строка - это все 9s; в этом случае следующий самый высокий палиндром равен 1x1, где x = соответствующее число 0s. Второй случай: если строка уже является палиндром; чтобы найти следующий самый высокий номер палиндрома, я делаю высокий и низкий индекс первых чисел, которые НЕ являются 9; примером этого будет 191 или 1991 год. Я меняю все 9s на 0s, и я хочу добавить 1 к следующему номеру с высоким и низким индексом. Например, это изменит значение с 191 по 202 или с 1991 по 2002 год. В случае моего теста 1001 должно измениться на 1111, где индексы: 1 и 2. –