~cpp
#include <iostream>
using namespace std;
#include <assert.h>
const int TEN = 10;
int reverse(int number); //뒤바꾼 수가 원래 수와 같다면 -1 이 리턴
void main(){
int N;
int input[10] = {0};
int output[10] = {0};
int outputN[10] = {0};
int trial = 0;
cin>> N;
for(int cycle=0; cycle< N; cycle++ ){
cin>>input[cycle];
trial = 0;
while(1){
if( reverse( input[cycle] ) == -1){
output[cycle] = input[cycle];
outputN[cycle]= trial;
break;
}else{
input[cycle]+= reverse( input[cycle] );
trial++;
}
}
}
for(int cycle=0; cycle< N; cycle++ )
cout<<outputN[cycle]<<" "<<output[cycle]<<endl;
}
int reverse(int number){
int originalNum = number;
int numbers[10] = {0};
int zeros = 1;
int chipers = 0; //a number of five chipers 다섯 자리수, 자릿수
int returnNum = 0;
//자릿수를 센다.
for(chipers = 0; number > zeros; zeros *= TEN){
chipers++;
}
zeros /= TEN;
//수를 차례로 배열에 넣는다.
for(int i=0; i< chipers; i++){
numbers[i] = number / zeros;
number -= zeros * numbers[i];
zeros /= TEN;
}
//배열을 뒤집는다.
zeros = 1;
for(i=0; i< chipers; i++){
returnNum += numbers[i] * zeros;
zeros *= TEN;
}
//returnNum을 이용하여 앞과 뒤가 같은지 검사한다.
if( returnNum == originalNum )
return -1;
return returnNum;
}