正确实施从SPOJ寻找下一个回文

时间:2015-03-18 06:36:16

标签: c++ algorithm logic

我是入门级程序员,我通常使用javascript。我正在努力提高我的编程技能,并开始研究SPOJ问题。我是在线编程的新手。

请查看this question

  

输入

     

第一行包含整数t,即测试用例的数量。整型   K在下一个t行中给出。

     

输出   对于每个K,输出大于K的最小回文。

以下是我的实施。它超过了给定的时间限制。什么是解决这个问题的更好方法?请帮忙。

#include <iostream>
#include <string>

using namespace std;

string getReverse(string str){
    string reversedString = "";
    double i = str.length();
    while(--i >= 0){
        reversedString += str[i];
    }
    return reversedString;
}

string incrementNumber(string str){
    string nextValue = "";
    long stringLength = str.length();
    long i = 0;
    char temp;
    bool isNotIncremented = true;
    int num[stringLength + 1];
    num[0] = 0;
    while (i++ < stringLength){
        temp = str[i - 1];
        num[i] = temp - 48;
    }
    for (i = stringLength; i > 0; i--){
        if (isNotIncremented){
            if ((num[i] + 1) <= 9){
                num[i] = num[i] + 1;
                isNotIncremented = false;
            }
            else{
                num[i] = 0;
            }
        }
        nextValue = ((char)(48 + num[i])) + nextValue;
    }
    if (isNotIncremented){
        nextValue = "1" + nextValue;
    }
    return nextValue;
}

bool isPalindrome(string str){
    return str == getReverse(str);
}

int main() {
    // your code goes here
    int numTestCases;
    bool nextPalindromeNotFound;
    string nextNumber;

    cin >> numTestCases;

    while(numTestCases--){
        string input;
        cin >> input;

        nextPalindromeNotFound = true;

        nextNumber = input;

        while (nextPalindromeNotFound){
            nextNumber = incrementNumber(nextNumber);
            nextPalindromeNotFound = !(isPalindrome(nextNumber));
        }

        cout << nextNumber << endl;
    }
    return 0;
}

0 个答案:

没有答案