Thenks for guiding me. I think i solve the problem ,i am using now strings and chars[] ,but i still getting wrong answer from SPOJ, although i tried a worst case scenario in Visual Studio, and that was 1000000 digits of nines. I supose that input is not for example : 0000 or somthing like that ,because that its not a correct input. So my code is bellow... :
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Numerics;
using System.IO;
namespace Test1
{
class Program
{
static void EvenOrOdd(ref string arrayOfString1)
{
char[] charOfArray;
int lengthOfChar;
if (arrayOfString1.Length % 2 == 0)
{
string left, right, reverseLeft;
left = arrayOfString1.Substring(0, arrayOfString1.Length / 2);
right = arrayOfString1.Substring(arrayOfString1.Length / 2);
charOfArray = left.ToCharArray();
Array.Reverse(charOfArray);
reverseLeft = new string(charOfArray);
charOfArray = left.ToCharArray();
if (String.CompareOrdinal(reverseLeft, right) <= 0)
{
int j = charOfArray.Length - 1;
int k;
do
{
if (j == 0 && charOfArray[j] == '9')
{
string extra = "1";
charOfArray[j] = '0';
string zeros = new string(charOfArray);
extra += zeros;
charOfArray = extra.ToCharArray();
break;
}
else if (charOfArray[j] == '9')
{
charOfArray[j] = '0';
}
else
{
charOfArray[j]++;
}
k = j;
j--;
} while (charOfArray[k] == '0');
left = new string(charOfArray);
lengthOfChar = right.Length;
right = left.Substring(0, lengthOfChar);
charOfArray = right.ToCharArray();
Array.Reverse(charOfArray);
right = new string(charOfArray);
arrayOfString1 = left + right;
}
else
{
right = reverseLeft;
arrayOfString1 = left + right;
}
}
else
{
string left, right, middle, reverseLeft, leftMiddle;
left = arrayOfString1.Substring(0, arrayOfString1.Length / 2);
middle = arrayOfString1[arrayOfString1.Length / 2].ToString();
right = arrayOfString1.Substring(arrayOfString1.Length / 2 + 1);
leftMiddle = arrayOfString1.Substring(0, arrayOfString1.Length / 2 + 1);
charOfArray = left.ToCharArray();
Array.Reverse(charOfArray);
reverseLeft = new string(charOfArray);
if (String.CompareOrdinal(reverseLeft, right) <= 0)
{
lengthOfChar = right.Length;
charOfArray = leftMiddle.ToCharArray();
int j = charOfArray.Length - 1;
int k;
do
{
if (j == 0 && charOfArray[j] == '9')
{
string extra = "1";
charOfArray[j] = '0';
string zeros = new string(charOfArray);
extra += zeros;
charOfArray = extra.ToCharArray();
break;
}
else if (charOfArray[j] == '9')
{
charOfArray[j] = '0';
}
else
{
charOfArray[j]++;
}
k = j;
j--;
} while (charOfArray[k] == '0');
leftMiddle = new string(charOfArray);
right = leftMiddle.Substring(0, lengthOfChar);
charOfArray = right.ToCharArray();
Array.Reverse(charOfArray);
right = new string(charOfArray);
arrayOfString1 = leftMiddle + right;
}
else
{
right = reverseLeft;
arrayOfString1 = left + middle + right;
}
}
}
public static void Main(string[] args)
{
try
{
int bufSize = 1000000;
Stream inStream = Console.OpenStandardInput(bufSize);
Console.SetIn(new StreamReader(inStream, Console.InputEncoding, false, bufSize));
int t;
t = int.Parse(Console.ReadLine());
string[] arrayOfString = new string[t];
for (int i = 0; i < arrayOfString.Length; i++)
{
arrayOfString[i] = Console.ReadLine();
}
for (int i = 0; i < arrayOfString.Length; i++)
{
EvenOrOdd(ref arrayOfString[i]);
Console.WriteLine(arrayOfString[i]);
}
}
catch (Exception eX)
{
Console.WriteLine(eX.Message);
}
}
}
}