利用数组,实现回文数的判断

简介: 任务:利用数组,实现回文数的判断#include<iostream>using namespace std;bool isPalindrome(int);int main(){ int m,n; cout<<"求多少以内的回文数?"<<endl; cin>>m; for(n=1;n<=m;++n) if(isPali

任务:利用数组,实现回文数的判断

#include<iostream>
using namespace std;
bool isPalindrome(int);
int main()
{
	int m,n;
	cout<<"求多少以内的回文数?"<<endl;
	cin>>m;
	for(n=1;n<=m;++n)
		if(isPalindrome(n))
			cout<<n<<" ";
	return 0;
}

bool isPalindrome(int n)
{
	int a[20]; //用于存储n中的各位数
	int i=0;
	//下面的循环,使a数组中依次存放个、十、百……位数
	while(n>0)
	{
		a[i++]=n%10;
		n/=10;
	}
	//退出循环,可以知道n为i位数
	int j=0,k=i-1;
	while(a[j]==a[k]&&j<k)//只要两边的数相等,齐往中间“看”
		j++,k--;
	if(j>=k) 
		return true;  //前后两端对应的数字都比较过了,都相等,是回文数
	else 
		return false;
}

  拓展:利用上面的比较算法,可以判断一个字符串是否是回文(真正的文),典型的回文,如"level"。试编写这样的程序。本文最后还附一组古人的回文诗,值得欣赏。


  后记:写本文,源于有网友发来求助信让我看看下面的程序。其中用到了数组,是或以作为一种思路,再看到静态变量(并且还是全局的),尤其是goto语句,感觉到完全没有必要了。想去理出个头绪来,但如此难读,这种程序不读也罢,不管能不能完成任务,即使领着初学者读懂了,也是将人往沟里带的程序。交朋友要有选择,读程序也是这样。

  下面是原程序,粗读一下,当作反面材料好了。注意在实际工作中,静态变量、全局变量能不用就不用,而用高级语言编程,goto语句更是不要去用,有的是办法替代。

#include<iostream>
using namespace std;
int a[20]; //可以通过改变元素的多少来改变所求整数的范围
static int i=0;
void f(int);
void f(int n)
{
lp:for(n;n>=10;n--)
   {
	   int N=n;
	   for(i=0;i<10;i++) //用循环将一个整数的各位分离出来
	   {
		   if(N/10==0)
		   {
			   a[i]=N;
			   break;
		   }
		   else
		   {
			   a[i]=N;
			   N/=10;
		   }
	   }
	   int b=i;
	   for(i,b;i>=0;i--) //用来判断是否为回文数!
	   {
		   if(a[i]==a[b-i]) continue;
		   else
		   {
			   n--;
			   goto lp;
		   }
	   }
	   cout<<n<<endl;
   }
}
void main()
{
	int n=0;
	cout<<"求多少以内的回文数?"<<endl;
	cin>>n;
	f(n);
}

附:明末浙江才女吴绛雪《四时山水诗》,诗云: ——自http://baike.baidu.com/view/46546.htm

  莺啼岸柳弄春晴夜月明,
  香莲碧水动风凉夏日长,
  秋江楚雁宿沙洲浅水流,
  红炉透炭炙寒风御隆冬。
  这首十字回文诗,每句来回复读,可成一首七言绝句。四首绝句,也描写四时景色。
  春 景 诗
  莺啼岸柳弄春晴,柳弄春晴夜月明。
  明月夜晴春弄柳,晴春弄柳岸啼莺。
  夏 景 诗
  香莲碧水动风凉,水动风凉夏日长。
  长日夏凉风动水,凉风动水碧莲香。
  秋 景 诗
  秋江楚雁宿沙洲,雁宿沙洲浅水流。
  流水浅洲沙宿雁,洲沙宿雁楚江秋。
  冬 景 诗
  红炉透炭炙寒风,炭炙寒风御隆冬。
  冬隆御风寒炙炭,风寒炙炭透炉红。


目录
相关文章
|
容器
.NET Core-作用域与对象释放行为详解
.NET Core-作用域与对象释放行为详解
intellij debug模式提示 : Method breakpoints may dramatically slow down debugging
最近在搞一个搭建一个项目 , 项目搭建完之后发现启动不了 , 一直都是正在加载中 并且提示Method breakpoints may dramatically slow down debugging,百度之后才知道是打了方法断点的原因 , 之前不小心打了一个断点
210 0
|
11月前
|
设计模式 中间件 程序员
【实战指南】深入了解23种设计模式
《深入了解23种设计模式:程序员必读指南》旨在帮助程序员理解和应用设计模式,以解决常见编程问题。书中介绍了设计模式的起源、目的及其在提高代码复用性、质量和团队沟通中的作用。涵盖创建型、结构型和行为型三大类共23种设计模式,每种模式均附有详细解析与C++实现示例,适合初学者和有经验的开发者学习参考。
257 85
|
11月前
|
SQL Java 数据库连接
MyBatis-Plus:简化 CRUD 操作的艺术
MyBatis-Plus 是一个基于 MyBatis 的增强工具,它旨在简化 MyBatis 的使用,提高开发效率。
298 1
MyBatis-Plus:简化 CRUD 操作的艺术
|
11月前
|
存储 Java API
优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。
【10月更文挑战第19天】本文介绍了如何优雅地使用Java Map,通过掌握其高级特性和技巧,让代码更简洁。内容包括Map的初始化、使用Stream API处理Map、利用merge方法、使用ComputeIfAbsent和ComputeIfPresent,以及Map的默认方法。这些技巧不仅提高了代码的可读性和维护性,还提升了开发效率。
355 3
|
存储 关系型数据库 MySQL
MySQL删除数据 文件大小不变的原因以及处理空洞问题
总之,MySQL中删除数据后文件大小不变的现象是由于InnoDB存储引擎的设计决策,旨在优化性能和空间的重用。处理这一问题需要综合考量数据库的使用场景以及可能的性能影响,选择合适的策略
1184 6
|
SQL 关系型数据库 MySQL
MySQL性能优化实战:从索引策略到查询优化
MySQL性能优化聚焦索引策略和查询优化。创建索引如`CREATE INDEX idx_user_id ON users(user_id)`可加速检索;复合索引考虑字段顺序,如`idx_name ON users(last_name, first_name)`。使用`EXPLAIN`分析查询效率,避免全表扫描和大量`OFFSET`。通过子查询优化分页,如LIMIT配合内部排序。定期审查和调整策略以提升响应速度和降低资源消耗。【6月更文挑战第22天】
1601 2
|
存储 NoSQL atlas
2024年向量数据库推荐榜单之MongoDB
目前市面上有哪些向量数据库解决方案,可协助您存储和检索高维向量?在推荐优选的几款向量数据库和库之前,我们需要厘清以下这两种技术的差异。
4587 0
|
前端开发 图形学
二维空间下的向量旋转
向量运算是计算机图形学的数学基础,而向量的旋转是向量的一种常见操作,本文将详细讲解向量在二维空间下的旋转原理。
1020 0
二维空间下的向量旋转
|
开发框架 Java UED
Java spring boot 一次调用多个请求
Java spring boot 一次调用多个请求