最近做了一点关于回文数的总结。
首先先写一篇关于回文数判断的几种方法。
回文数的概念:即是给定一个数,这个数顺读和逆读都是一样的。例如:121,1221是回文数,123,1231不是回文数。
方法一:
试用情境,处理小数字。使用数学方法。输入的回文数x的范围为x<10^9,int存储,或者x<10^18,long long存储的数,数字的范围不大。这里写的是int存储情况。
#include<stdio.h>
int main()
{
int x,newed,t,n;
while(scanf("%d",&x)!=EOF)
{
newed=0;
n=x;
do
{
newed=newed*10+x%10;
x/=10;
}while(x>0);
if(n==newed)
printf("Yes\n");
else
printf("No\n");
}
return 0;
}
方法二:
试用情景,处理大数字。使用字符串处理方式。因为回文数关于中心对称,只要比较对称的数即可。
#include<stdio.h>
#include<string.h>
int main()
{
int i,length,flag=1;
char a[100];
gets(a);
length=strlen(a);
for(i=0;i<=length/2;i++) {
if(a[i]!=a[length-i-1]) {
flag=0;
break;
}
}
if(flag==1)
printf("yes");
else
printf("no");
return 0;
}
方法三:
试用情景,处理大数字。使用栈的思想。和字符串处理方式类似,这里是比较出栈元素与串中字符,如不等,则是no。
#include<stdio.h>
#include<string.h>
#define StackSize 100
typedef struct
{
char data[StackSize];//开栈为100;
int top=0;
}SeqStack;
int main()
{
SeqStack s;
char str[100];
scanf("%s",str);
int len=strlen(str);
int i,flag=1;
for(i=0;i<len/2;i++)//将一半字符入栈
s.data[s.top++]=str[i];
if(len%2) i++; //奇数时自动跳过中间的数字,如121,跳过2,比较1
while(s.top)//相当于EmptyStack(&s),判断是否栈空.
{// 每弹出一个字符与相应字符比较
char temp=s.data[--s.top];
if(temp!=str[i]){
flag=0;
}else{
i++;
}
}
if(flag==0){
printf("no\n");
}else{
printf("yes\n");
}
return 0;
}
转载地址:http://blog.csdn.net/deaidai https://blog.csdn.net/deaidai/article/details/71820164