生成回文数
题目描述
所谓回文数就是左右对称的数字,比如:585,5885,123321…当然,单个的数字也可以算作是对称的。
小明发现了一种生成回文数的方法:
比如,取数字19,把它与自己的翻转数相加:
19 + 91 = 110,如果不是回文数,就再进行这个过程:
110 + 011 = 121 这次是回文数了。
200以内的数字中,绝大多数都可以在30步以内变成回文数,只有一个数字很特殊,就算迭代了1000次,它还是顽固地拒绝回文!
输出
请你提交该数字表示答案,不要填写任何多余的内容。
代码
#include <iostream>
using namespace std;
int vis[20];
bool P(int c){
int k=0,x=c;
int flag=0;
while(x!=0){
k++;
vis[k]=x%10;
x=x/10;
}
for(int i=1;i<=k;i++){
if(vis[i]==vis[k-i+1]){
flag++;
}
}
if(flag==k) return true;
else return false;
}
int main() {
long long a,b,c,d;
int temp,flag;
for(int i=196;i<=196;i++){
a=i; flag=0;
for(int j=1;j<=30;j++){
temp=0; b=0;c=0;flag=0; d=a;
while(a!=0){
temp=a%10;
b=b*10+temp;
a=a/10;
}
c=d+b;
// cout<<d<<' '<<b<<' '<<c<<' '<<i<<' '<<j<<endl;
if(P(c)){
// cout<<i<<' '<<c<<endl;
flag=1;
break;
}
else a=c;
}
if(flag==0) cout<<i;
}
return 0;
}
答案 196