若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。例如:给定一个十进制数 56,将 56 加 65(即把 56 从右向左读),得到 121 是一个回文数。
又如:数87:
STEP1:87+78=165
STEP2:165+561=726
STEP3:726+627=1353
STEP4:1353+3531=4884
在这里的一步是指进行了一次加法,上例最少用了 4 步得到回文数 4884。
写一个程序,给定一个数M,求最少经过几步可以得到回文数。如果在 30 步以内(包含 30 步)不可能得到回文数,则输出 Impossible!。
【输入格式】
一个整数M(0<M<10^12)。
【输出格式】
如果能在 30 步以内得到回文数,输出步数
否则输出 Impossible!。
【输入样例】
87
【输出样例】
4
#include<bits/stdc++.h>
using namespace std;
long long m,t;
int main(){
scanf("%d",&m);
for(int i=1;i<=30;i++){
t=0;
for(long long j=m;j>0;j=j/10){
t*=10;
t+=j%10;
}
if(t==m){
printf("%d",i-1);
return 0;
}
m+=t;
}
printf("Impossible!");
return 0;
}
491

被折叠的 条评论
为什么被折叠?



