描述
假设你有一个整数a,将它各位数字反转以后得到b,然后a=a+b,直到a是回文数为止.求出几次反转相加后能得到一个回文数,输出最小的次数和回文数.例如:
195 初始的a
591
-----
786
687
-----
1473
3741
-----
5214
4125
-----
9339 最终结果
输入
多组测试数据。
每组测试数据包含1个正整数a。(a<=10000)
输出
对于每组测试数据,输出产生回文数的最小次数和这个回文数.
如果超过20次运算还没出现回文数则输出”impossible”.
输入样例 1
195 265 750
输出样例 1
4 9339 5 45254 3 6666
代码
#include <iostream>
using namespace std;
typedef long long ll;
ll FZ (long long n) \\反转函数
{
ll x=0,y=n;
while (y>0)
{
x=x*10+y%10;
y/=10;
}
return x;
}
int HW (long long n) \\求回文数
{
ll x=0,y=n;
while (y>0)
{
x=x*10+y%10;
y/=10;
}
if (n==x)
{
return 1;
}
return 0;
}
int main()
{
long long a,b;
while (cin>>a)
{
if(HW(a)==1) cout<<0<<" "<<a<<endl; \\已经是回文数
else
{
int ct=0;
while(ct<=20)
{
b=FZ(a);
a+=b;
ct++;
if(HW(a)==1)
{
break;
}
}
if (ct>20)
{
cout<<"impossible"<<endl;
}
else cout<<ct<<" "<<a<<endl;
}
}
return 0;
}