回文数的判断(三种方法)

来源:互联网 发布:最佳网络投资平台 编辑:程序博客网 时间:2024/05/28 20:19

最近做了一点关于回文数的总结。
首先先写一篇关于回文数判断的几种方法。
回文数的概念:即是给定一个数,这个数顺读和逆读都是一样的。例如: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=0;    char a[100];    gets(a);    length=strlen(a);    for(i=0;i<=length/2;i++)    {       if(a[i]==a[length-1])          flag=1;       else       {           flag=0;           break;       }       length--;    }    if(flag==1)      printf("yes");    else      printf("no");    return 0;}

方法三:
试用情景,处理大数字。使用栈的思想。和字符串处理方式类似,这里是比较出栈元素与串中字符,如不等,则是no。

#include<stdio.h>#include<string.h>#define StackSize 100typedef 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;}
0 0
原创粉丝点击