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

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

#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

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


评论 6
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

迂者-贺利坚

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值