~cpp
#include <iostream>
using namespace std;
#include <math.h>
unsigned int numLength(unsigned int num)
{
unsigned int turn = 0;
while(num >= 10)
{
num /= 10;
turn++;
}
return turn+1;
}
bool isPalindrome(unsigned int *num, unsigned int length)
{
unsigned int i;
bool isPal = false;
if(length == 1)
isPal = true;
else {
for(i = 0; i < length/2; i++)
{
if(num[i] == num[length-i-1])
isPal = true;
else {
isPal = false;
break;
}
}
}
return isPal;
}
unsigned int ReverseAndAdd(unsigned int *num, unsigned int length)
{
unsigned int i, reverseNum = 0, Num = 0;
unsigned int *temp = new unsigned int [length];
for(i = 0; i < length; i++)
{
temp[i] = num[length-i-1];
reverseNum += temp[i] * pow(10, length-i-1); // 모아서 더하기
Num += num[i] * pow(10, length-i-1);
}
// delete[] temp;
return (Num+reverseNum);
}
unsigned int main()
{
unsigned int addNum, length, i, turn = 0, testCaseNum;
unsigned int num;
unsigned int * store_numbers;
cin >> testCaseNum;
while(testCaseNum >= 1)
{
turn = 0;
cin >> num;
store_numbers = new unsigned int[numLength(num)];
for(i = 0; i < numLength(num); i++) // 나누어 넣기
{
store_numbers[i] = num / pow(10, (numLength(num)-i-1));
store_numbers[i] = store_numbers[i] % 10;
}
while(1)
{
length = numLength(num);
for(i = 0; i < length; i++) // 나누어 넣기
{
store_numbers[i] = num / pow(10, (length-i-1));
store_numbers[i] = store_numbers[i] % 10;
}
if(isPalindrome(store_numbers, length))
{
if(turn == 0)
addNum = num;
if(length == 1)
addNum = num;
break;
}
addNum = ReverseAndAdd(store_numbers, length);
// 바꿔서 더하기
turn++;
num = addNum;
}
cout << turn << " " << addNum << endl;
testCaseNum--;
}
// delete []store_numbers;
return 0;
}