我是入门级程序员,我通常使用javascript。我正在努力提高我的编程技能,并开始研究SPOJ问题。我是在线编程的新手。
输入
第一行包含整数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;
}