我制作了这个代码,该代码应该增加一个数字,直到得到这个输入数字的下一个回文数。
程序将数字作为字符串“因为它可能是一个非常大的数字 (0< digits< 1000000)“....
守则
int main ()
{
string number = "1243";
int position = number.length()-1;
do
{
if (number[position] == '9')
{
//cout << "hereee";
number[position] = '0';
int n1 = (int)number[position-1] - '0';
n1++;
number[position-1] = n1 + '0';
nextPalindrome[position-1];
cout << number <<"hereee2"<< endl; // only to determine if i get in "if"
}
else
{
int n1 = (int)number[position] - '0';
n1++;
number[position] = n1 + '0';
cout << number <<"hereee1" << endl; // only to determine if i get in "else"
}
} while (isPalindrome(number) == false);
}
开始取数字在当前位置并递增并再次将其作为字符返回
问题
cout << number <<"hereee1" << endl;
此行显示运行时的数字状态,如下所示:
12"6 hereee1
12"7 hereee1
12"8 hereee1
12"9 hereee1
12#0 hereee2
12#1 hereee1
虽然必须
1236 hereee1
1237 hereee1
1238 hereee1
1239 hereee1
1240 hereee2
1241 hereee1
我不知道错误在哪里..任何人都可以提供帮助
注意:“isPalindrome”是一个函数,以字符串作为参数,如果原始字符串等于其反向,则返回true .. else return false
答案 0 :(得分:3)
当position-1
的数字为'9'
?
int n1 = (int)number[position-1] - '0';
n1++;
number[position-1] = n1 + '0';
答案 1 :(得分:1)
你不能很好地处理结转......这部分无效:
int n1 = (int)number[position-1] - '0';
n1++;
number[position-1] = n1 + '0';
这只会增加前一个地方的数字。如果恰好是'9'
(与Mats Petersson试图提出的相同),它只会溢出......但是它应该被转移到下一个数字......这是一个递归解决方案( 要注意,可能存在语法错误,我从未用C ++编写代码......):
/*
* This function adds one to the specified digit of a
* string containing a decimal integer.
*
* Contains no checks whatsoever. Behavior is undefined when
* not supplied a valid input string.
*/
int addOneToDigit (string number, int digit)
{
if (number[digit] == '9')
{
number[digit] = '0';
//we need to handle getting a longer string too...
if(digit>0)
{
return addOneToDigit(number, digit-1);
}
else
{
return "1" + number;
}
}
else
{
int n1 = (int)number[digit] - '0';
n1++;
number[digit] = n1 + '0';
}
return number;
}
并且main()看起来像这样:
int main ()
{
string number = "1243";
do
{
number = addOneToDigit(number,number.length()-1)
}
while (isPalindrome(number) == false);
}