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