问题:
判断输入的数是否是回文数(比如:1221,122221,2,111),就是从左向右读和从右向左读都是一样的,如果是就输出,当输入-1结束循环
分析:
1,确定输入的位数 f(n)函数
2,将每位上的数都存到数组中,需要用到p的10次方,函数是f1(p)
3,利用a[i]==a[m-i-1]来进行判断是否相等
代码:
int f(int n){ //得到位数
int count=0;
while(1){
if(n==0){
break;
}
n=n/10;
count++;
}
return count;
}
int f1(int p){ //得到10的p次方
int sum=1,i;
for(i=0;i<p;i++){
sum*=10;
}
return sum;
}
main(){
int n;
while(1){
scanf("%d",&n);
if(n==-1){
break;
}
//确定位数
int m=f(n),m1=m,n1=n;
int p[m1],i;
//将每位上的数存到p数组中
for(i=0;i<m1;i++){
p[i]=n/f1(--m);
n=n-p[i]*f1(m);
}
int leap=1;
//判断是否相等
for(i=0;i<m1;i++){
if(p[i]!=p[m1-1-i]){
leap=0;
break;
}
}
if(leap){
printf("%d",n1);
}
}
}
结果:
代码2:最近从网上看到另外一种方法,不错哦
#include <iostream>
#include <cstring>
using namespace std;
int main()
{
char a[100]={0};
while(1){
cin>>a;
if(a[0]=='-'&&a[1]=='1'){
break;
}
int len=strlen(a);
int i;
bool b=true;
for(i=0;i<len;i++){
if(a[i]!=a[len-i-1]){
b=false;
break;
}
}
if(b){
cout<<"yes"<<endl;
}else{
cout<<"no"<<endl;
}
}
return 0;
}