c语言判断回文数
来源:学生作业帮助网 编辑:作业帮 时间:2024/09/25 05:30:10 字数作文
篇一:C语言判断回文数
题目6:一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#include
main()
{
int a,x,y,p,q;
printf("输入一个五位数:\n");
scanf("%d",&a);
for(;a<10000||a>99999;)
{
printf("输入错误再次输入:\n");
scanf("%d",&a);
}
x=a%10;
y=a/10000;
q=(a/10)%10;
p=(a/1000)%10;
if(x==y&&q==p)
printf("%d是回文数\n",a);
}
篇二:用c语言判断是否为回文数
输入一个5位数,判断它是不是回文数。即12321是回文数,个位与万位相同,十位与千位相同。
#include
voidpanduan(int a);
int main()
{
int x;
printf("输入一个五位数\n");
scanf("%d",&x);
/*
//运行一次,输入错误或者正确都结束 if (x > 99999 || x <10000) { printf("输入错误\n"); } else { panduan(x); } */ //循环输入知道正确为止结束 for (;x>99999 || x<10000;) {
printf("输入错误重新输入\n");
scanf("%d",&x);
}
panduan(x);
return 0;
}
voidpanduan(int a)
{
intb,c,d,e;
b = a / 10000;
c = (a / 1000) % 10;
d = (a % 100) / 10;
e = a % 10;
if (b == e && c == d )
}
{ printf("是回文数\n"); } else printf("不是回文数\n");
篇三:数据结构C语言版判断回文数实验报告
数据结构实验报告
班 级
班内序号
学生姓名
指导教师
时间
一、实验目的 判断回文数 : : : 2011年10月24日 : :
熟悉栈和队列的各项操作,区别栈和队列的操作原理。
二、实验内容
利用栈的操作完成读入的一个以*结尾的字符序列是否是回文序列的判断。
回文序列即正读与反读都一样的字符序列,例如:43211234*是回文序列,而789678*不是。
三、数据结构及算法思想
算法思想:从键盘上读取一个字符,同时存储在顺序栈与链队列之中,直到字符序列的最后一个字符为*停止插入。在程序中设置了一个标志位flag,将输入的序列分别做入栈、出栈、入队、出队操作,若出栈与出队的数据完全一致,则将flag标志为1,否则为零。Flag为1,则表示该序列是回文序列,否则,为非回文序列。
四、模块划分
1. 对各个模块进行功能的描述
(1)void InitStack(SeqStack *S):栈初始化模块,即初始化一个空栈,随后对该空栈进行数据的写入操作;
(2)int Push(SeqStack *S,char x,int cnt):入栈操作,即给空栈中写入数据,数据长度有宏定义给出;
(3)int Pop(SeqStack * S,char * x):出栈操作,即将栈中的数据输出,由于栈的操作是先进后出,因此,出栈的数据是原先输入数据的逆序;
(4)void InitQuene(SeqQuene *Q):队列初始化,即初始化一个空队列,最后对该空队列进行数据的写入操作;
(5)int EnterQuene(SeqQuene *Q,char x,int cnt):入队操作,即给空队列中写入数据,数据长度一样有宏定义给出;
(6)int DeleteQuene(SeqQuene *Q,char *x,int cnt):出队操作,即将队列中的数据输出,由于队列的操作是先进先出,因此,出队的数据室原先输入数据的正序;
(7)void main():主函数,用于调用前面的模块,进行出队数据与出栈数据的比较,判断输入的序列是否是回文序列。
2. 模块之间关系及其相互调用的图示
五、详细设计及运行结果
(1)程序设计及编码
#include
#include
#define MAX 50
#define FALSE 0
#define TURE 1
//定义栈
typedef struct
{
char elem[MAX];
int top;
}SeqStack;
//定义循环队列
typedef struct
{
char element[MAX];
int front;
int rear;
}SeqQuene;
//初始化栈
void InitStack(SeqStack *S)
{
S->top = -1;//构造一个空栈
}
//入栈
int Push(SeqStack *S,char x,int cnt)
{
if(S->top == cnt-1)
return(FALSE);
S->top++;
S->elem[S->top] = x;
return(TURE);
}
//出栈
int Pop(SeqStack * S,char * x)
{
if(S->top == -1)
return(FALSE);
else
{
*x = S->elem[S->top];
S->top--;
return(TURE);
}
}
//初始化队列
void InitQuene(SeqQuene *Q)
{
Q->front = Q->rear = 0;
}
//入队
int EnterQuene(SeqQuene *Q,char x,int cnt)
{
if((Q->rear+1)%(cnt+1) == Q->front)
return(FALSE);
Q->element[Q->rear] = x;
Q->rear = (Q->rear+1)%(cnt+1);
return(TURE);
}
//出队
int DeleteQuene(SeqQuene *Q,char *x,int cnt)
{
if(Q->front == Q->rear)
return(FALSE);
*x = Q->element[Q->front];
Q->front = (Q->front+1)%(cnt+1);
return(TURE);
}
//主函数
void main()
{
int i,cnt,flag;
SeqStack s;
SeqQuene q;
char a[MAX],b[MAX],c[MAX];
flag=0;
printf("请输入由*结束且小于%d的回文序列:\n",MAX); for(i = 0;i { scanf("%c",&a[i]); if(a[i] == '*') break; } cnt = i; printf("输入了有%d个字符。\n",cnt); InitStack(&s); InitQuene(&q); for(i = 0;i { EnterQuene(&q,a[i],cnt); Push(&s,a[i],cnt); } printf("正序字符串为:\n"); for(i = 0;i 篇四:C语言回文数的判断 C语言回文数的判断 #include int main() { void A(char a[],int n); char b[N]; int m; printf("请输入一个数:"); gets(b); m = strlen(b); A(b,m); puts(b); return 1; } void A(char a[],int n) { int i; for(i=0;i<=n/2;i++) { if(a[i]!=a[n-i-1]) { printf("No!\n"); return 0; } } printf("yes!"); } 篇五:C语言回文数猜想 2.7.1.1 练习1 回文数的猜想 1 2 3 输入一个数 一个数,加上是这个数的倒序数,得出结果 判断是否为回文数,是就退出,否则返回第2步骤 回文数:1336331、9559 典型:输入1735 1753+3571=5324 5324+4235=9559 9559就是一个回文数 程序解答过程: 1 2 设计出各函数功能,便于调用 编码,解答 各函数功能: 输入数据:int input(void) 对数据取逆序:int reverse(int data) 判断回文数:int ispalin(int data) 溢出判断: int isover(int data //palin.c #include int input(void) { } int data=-1;//防止赋值失败? for(;;) { } return data; scanf("%d",&data); if(data>=10)//使得输入的数字不小于10 break; scanf("%*[^\n]");//取得除了换行\n之外的所有字符,抛掉 scanf("%*c");//抛掉换行\n int reverse(int data) { } int ispalin(int data) { } int isover(int data) { } int main() { } int data=input(); int i; for(i=0;!isover(data);data+=reverse(data)) { } printf("Can not find Palin!\n"); return 0; if(!ispalin(data)) else { } printf("Palin:%d\n",data); return 0; printf("[%d]:%d+%d=%d\n",++i,data,reverse(data),data+reverse(data)); return data<=0||reverse(data)<=0;//当data大小越界,即超过2^31-1,变成负数 return data==reverse(data); int res=0; for(;data>0;data=data/10)//取得data的的逆序 res=res*10+data%10;//data%10取得data最后一位数字 return res; 知识:unsigned int:2^32-1 int : 2^31-1 超过了最大值会越界,越界的数会变成负数 知识盲点: 1) scanf(“%*c[^\n]”); 2) scanf(“%*c”); %*c :读取出来,再扔掉,即是把缓冲区清除掉,c是格式控制符,控制把字符类型的输入清除 [^\n] 输入的字符除了换行\n之外的集合 1的解析:将所有不等于\n的字符扔掉 2的解析:将输入的一个字符去掉