所谓回文字符串或回文数,就是一个字符串或整数反过去看与顺过去看都是一样的,比如abcba反过来也是abcba,1331反过来看也是1331,所以这就是所谓的回文字符串或回文数。下面我们就来编程得到所谓的回文字符串和回文数。
1、回文字符串检测并输出:
(1)采用数组的方式:
- #include <iostream>
- using namespace std;
-
- int main(void)
- {
- char str[180],l;
- int i,t=0;
- cout<<"输入一个字符串:";
- cin>>str;
- l=strlen(str);
- for(i=0;i<=l/2;i++)
- {
- if(str[i]!=str[l-i-1])
- {
- break;
- }
- }
- if(i>l/2)
- cout<<str<<"是回文!"<<endl;
- else
- cout<<str<<"不是回文!"<<endl;
- }
(2)采用指针的方式:
- #include <stdio.h>
- #include <string.h>
- #include <stdlib.h>
-
- int main(void)
- {
- int x,i;
- char *st1=NULL;
-
- st1 = (char *)malloc(100 * sizeof(char));
- if(NULL == st1)
- {
- printf("malloc failed!\n");
- return -1;
- }
-
- memset(st1,0, 100);
-
- gets(st1);
-
- x=strlen(st1);
-
- for(i = 0; i <= x/2; i++)///比到一半就不比了,原理已讲
- {
- if(st1[i] != st1[x-i-1])///这就是比较两端的字符
- {
- break;//不是回文
- }
- }
-
- free(st1);
- st1 = NULL;
-
- if(i> x/2)///没执行break,就是回文
- printf("YES");
- else
- printf("NO");
- }
数组和指针的区别在于就是数组是在静态存储区上创建的,而指针是动态创建的,相对来说指针比较灵活。指针灵活的同时,必须注意指针必须初始化和被释放,要不然指针用起来就很危险的。
2、回文整数检测并输出
- #include <iostream>
- using namespace std;
- bool ifn(int x)
- {
- int m=0,n;
- n=x;
- while(n)
- {
- m=m*10+n%10;
- n=n/10;
- }
- if(m==x)
- return true;
- if(m!=x)
- return false;
- }
- void main( )
- {
- int a;
- cout<<"输入一个数:";
- cin>>a;
- if(ifn(a))
- cout<<a<<"是回文数!"<<endl;
- else
- cout<<a<<"不是回文数!"<<endl;
- }
-