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

回文数的判断(三种方法)最近做了一点关于回文数的总结 首先先写一篇关于回文数判断的几种方法 回文数的概念 即是给定一个数 这个数顺读和逆读都是一样的 例如 121 1221 是回文数 123 1231 不是回文数 方法一 试用情境 处理小数字 使用数学方法 输入的回文数 x 的范围为 x lt 10 9 int 存储 或者 x lt 10 18 longlong 存储的数 数字的范围不大 这里写的是 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; }
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/233045.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号