蓝桥杯题目练习 提升篇 [蓝桥杯2015决赛]生成回文数

生成回文数

题目描述

所谓回文数就是左右对称的数字,比如: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

发布了128 篇原创文章 · 获赞 6 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/Ace_bb/article/details/104327121