所谓回文字符串或回文数,就是一个字符串或整数反过去看与顺过去看都是一样的,比如abcba反过来也是abcba,1331反过来看也是1331,所以这就是所谓的回文字符串或回文数。下面我们就来编程得到所谓的回文字符串和回文数。
1、回文字符串检测并输出:
(1)采用数组的方式:
[html] view plain copy #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)采用指针的方式:
[html] view plain copy #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、回文整数检测并输出
[html] view plain copy #include <iostream> using namespace std; bool ifn(int x) { int m=0,n; n=x; while(n) { m=m*10+n; 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; }
