Hello guys, I got stuck. I'm testing this program in many ways and it looks like there are no errors. Everything is working fine. But SPOJ keeps telling me "wrong answer". Can u help me find this flaw?
#include <iostream>
#include <cstdlib>
#include <stdio.h>
std::string Reversed(std::string word);
void Reverse(std::string &word);
void IncreaseByOne(std::string &word, int position);
int main()
{
int n;
std::cin >> n;
for(int i = 0; i < n; i++)
{
std::string integer;
std::cin >> integer;
while(true)
{
if((integer[0] == '0') && (integer.length() >= 2))
{
std::string tmp = integer.substr(1);
integer = tmp;
}
else break;
}
if(integer.length() <= 1)
{
integer = "11";
}
else
{
if(integer.length() % 2 == 0)
{
int tmp = integer.length() / 2 - 1;
int leng = integer.length();
if((integer.substr(0, tmp + 1) == Reversed(integer.substr(tmp + 1))) || (integer[tmp] < integer[tmp + 1]))
{
IncreaseByOne(integer, tmp);
if(leng != integer.length())
{
tmp = (integer.length() - 1) / 2;
std::string stmp = integer.substr(0, tmp);
Reverse(stmp);
integer.replace(tmp + 1, integer.length() - 1, stmp);
}
else
{
std::string stmp = integer.substr(0, tmp + 1);
Reverse(stmp);
integer.replace(tmp + 1, integer.length() - 1, stmp);
}
}
else
{
std::string stmp = integer.substr(0, tmp + 1);
Reverse(stmp);
integer.replace(tmp + 1, integer.length() - 1, stmp);
}
}
else
{
int tmp = (integer.length() - 1) / 2;
int leng = integer.length();
if((integer.substr(0, tmp) == Reversed(integer.substr(tmp + 1))) || (integer[tmp - 1] < integer[tmp + 1]))
{
IncreaseByOne(integer, tmp);
if(leng != integer.length())
{
tmp = integer.length() / 2 - 1;
std::string stmp = integer.substr(0, tmp + 1);
Reverse(stmp);
integer.replace(tmp + 1, integer.length() - 1, stmp);
}
else
{
std::string stmp = integer.substr(0, tmp);
Reverse(stmp);
integer.replace(tmp + 1, integer.length() - 1, stmp);
}
}
else
{
std::string stmp = integer.substr(0, tmp);
Reverse(stmp);
integer.replace(tmp + 1, integer.length() - 1, stmp);
}
}
}
std::cout << integer << std::endl;
}
return 0;
}
std::string Reversed(std::string word)
{
std::string tmp;
for(int i = word.length() - 1; i >= 0; i--)
{
tmp += word[i];
}
return tmp;
}
void Reverse(std::string &word)
{
std::string tmp;
for(int i = word.length() - 1; i >= 0; i--)
{
tmp += word[i];
}
word = tmp;
}
void IncreaseByOne(std::string &word, int position)
{
if(position >= 0)
{
int tmp = (int)(word[position] - '0');
if(tmp < 9)
{
word[position]++;
}
else
{
word[position] = '0';
IncreaseByOne(word, position - 1);
}
}
else if ((position == -1) && (word[0] == '0'))
{
int l = word.length();
word = "";
for(int i = 0; i < l; i++)
{
word += "0";
}
std::string tmp = word;
word = "1" + tmp;
}
}