当前位置: 首页 > 知识库问答 >
问题:

下一个回文。。奇异字符输出

赵正雅
2023-03-14

我做了这个代码,应该增加一个数字,直到得到这个输入数字的下一个回文数。

程序将数字作为字符串",因为它可能是一个非常大的数字(0

密码

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

我不知道哪里出错了。。有人能帮忙吗

注意:“isAlindrome”是一个以字符串为参数的函数,如果原始字符串等于其倒数,则返回true。。否则返回false

共有2个答案

古扬
2023-03-14

你不能很好地处理遗留物。。。本部分无效:

    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);
}
郑茂勋
2023-03-14

位置-1处的数字为'9'时,结果是什么?

    int n1 = (int)number[position-1] - '0';
    n1++;
    number[position-1] = n1 + '0';
 类似资料:
  • 问题内容: 这是代码片段: 输出为: 为什么会这样呢?我认为是,要么,或。 这里发生了什么? 问题答案: 二是算术加法,不是字符串连接。您必须执行或之类的操作,或使用和方法来确保操作符中的至少一个是用于字符串串联的运算符。 [JLS 15.18加法运算符](http://java.sun.com/docs/books/jls/third_edition/html/expressions.html#

  • 本文向大家介绍写一个方法判断字符串是否为回文字符串相关面试题,主要包含被问及写一个方法判断字符串是否为回文字符串时的应答技巧和注意事项,需要的朋友参考一下 https://leetcode-cn.com/problems/valid-palindrome/ 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写。 说明:本题中,我们将空字符串定义为有效的回文串。 示例 1:

  • 问题内容: 好的,这就是我的for子手游戏代码,我唯一要做的就是让我的程序将其中一个单词随机化,这应该在方法中成功完成。但是我唯一的问题是让String变量 “ word” 返回到主类(在主类中的所有 “ word” 变量下面都有错误)。 如果我可以通过这种方法获得另一种帮助,或者从列表中产生随机单词的另一种方法,那将是惊人的。 问题答案: 在Java中,参数是通过值而不是引用传递的。因此,您不能

  • 通过前面的学习我们知道, C++ 程序中一般用 ostream 类的 cout 输出流对象和 << 输出运算符实现输出,并且 cout 输出流在内存中有相应的缓冲区。但有时用户还有特殊的输出需求,例如只输出一个字符,这种情况下可以借助该类提供的 put() 成员方法实现。 put() 方法专用于向输出流缓冲区中添加单个字符,其语法格式如下: ostream&put(char c); 其中,参数 c

  • 我有一个家庭作业来创建这个函数。这是我的密码: 以下是此函数的输出与预期输出:https://i.imgur.com/e524tW6.png