判断是否是回文数

判断是否是回文数
判断是否是回文数

【实验报告】撰写

实验编号:

课程名称:

课程编号:

实验学期:

学时:

班级:

姓名:

学号:

实验题目:

任课老师:

实验时间:

实验目的和要求

实验内容与分析设计

实验步骤与调试过程

实验结果

疑难小结

主要算法和程序清单

相关资料

传: 请上传20M 以内的rar 或zip 文件

堆栈方式实现字符回文数判断(可运行)

设线性表A中有n个字符,试设计程序判断字符串是否中心对称,例如xyzyx和xyzzyx都是中心对称的字符串。 #include #include #include #include using namespace std; #define max 100 typedef char elemtype; typedef struct node { elemtype data; struct node *next; }listack; void initstack(listack *&s) { s=(listack*)malloc(sizeof(listack)); s->next=NULL; } int stacklength(listack *s) { int i=0; listack *p; p=s->next; while(p!=NULL) { i++; p=p->next; } return i; } void clearstack(listack *s) { listack *p=s->next; while(p!=NULL) { free(s); s=p; p=p->next; } } int stackempty(listack *s) { return(s->next==NULL);

void push(listack *& s,elemtype e) { listack *p; p=(listack*)malloc(sizeof(listack)); p->data=e; p->next=s->next; s->next=p; } int pop(listack *&s,elemtype &e) { listack *p; if(s->next==NULL) return 0; p=s->next; e=p->data; s->next=p->next; free(p); return 1; } int gettop(listack *s,elemtype &e) { if(s->next==NULL) return 0; e=s->next->data; return 1; } int judge(char *str) { listack *s;elemtype e; initstack(s); char *p=str; while(*p!='#') { push(s,*p); p++; } while(!stackempty(s)) { pop(s,e); if(e!=*str) return 0; str++; } return 1;

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(;;) { scanf("%d",&data); if(data>=10)//使得输入的数字不小于10 break; scanf("%*[^\n]");//取得除了换行\n之外的所有字符,抛掉 scanf("%*c");//抛掉换行\n } return data; }

int reverse(int data) { int res=0; for(;data>0;data=data/10)//取得data的的逆序 res=res*10+data%10;//data%10取得data最后一位数字 return res; } int ispalin(int data) { return data==reverse(data); } int isover(int data) { return data<=0||reverse(data)<=0;//当data大小越界,即超过2^31-1,变成负数 } int main() { int data=input(); int i; for(i=0;!isover(data);data+=reverse(data)) { if(!ispalin(data)) printf("[%d]:%d+%d=%d\n",++i,data,reverse(data),data+reverse(data)); else { printf("Palin:%d\n",data); return 0; } } printf("Can not find Palin!\n"); return 0; } 知识:unsigned int:2^32-1 int : 2^31-1 超过了最大值会越界,越界的数会变成负数

Java第一次作业-回文素数

《Java语言》课程作业 (第一次) 题目第8题 学院计算机学院专业 班别 学号 姓名陈聪 2015年4月22日

一、课程题目 8、题目:回文素数 回文素数是指一个数同时为素数和回文数。例如:131是一个素数,同时也是一个回文数。数字313和757也是如此。编写程序,显示前100个回文素数,每行显示10个数并且准确对齐,如下所示: 2 3 5 7 11 101 131 151 181 191 313 353 373 383 727 757 787 797 919 929 ……. …. …. ………………. [选题人数:3] 二、题目分析与设计 1、题目的需求:编写程序,显示前100个回文素数,每行显示10个数并且准确对齐。 2、制定对应程序的功能: (1)将2以后的素数挑选出来,直到显示完前100个回文素数:利用for循环。 (2)判断挑选出来的素数是否为回文数:通过将原素数倒置再与原素数比较来判断。 (3)输出回文素数,同时判断是否要换行,通过确定位数来使回文素数准确 对齐。 3、(1)程序功能层次图: (2)程序结构流程图:

4、所使用的开发环境:Eclipse (1)判断一个数是否为素数: i=2; while(i

while(s!=0) { b=b*10+s%10; s=s/10; } (3)判断素数是否为回文数并输出: if(a==b) { n++; if(n%10==0) System.out.printf("%8d\n",a); else System.out.printf("%8d",a); } 三、测试分析 1、题目的需求:编写程序,显示前100个回文素数,每行显示10个数并且准确对齐。因此本程序不需要构建测试数据。 2、运行程序的结果如下: 所得到的前一百个回文素数与预计结果一致,格式正确,每行显示10个数并且准确对齐。 附录:源代码 package hui; public class huiwen{ public static void main(String args[]){ int a,b,s;

数据结构C语言版判断回文数试验报告

. 数据结构实验报告判断回文数 级班: 内序号班: 名生姓学: 教师导指: 时间: 201124月年10日

一、实验目的'. . 熟悉栈和队列的各项操作,区别栈和队列的操作原理。 二、实验内容 利用栈的操作完成读入的一个以*结尾的字符序列是否是回文序列的判断。 回文序列即正读与反读都一样的字符序列,例如: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.模块之间关系及其相互调用的图示 '. .

1004 绝对回文数

绝对回文数 Time Limit:10000MS Memory Limit:65536K Total Submit:30 Accepted:16 Description 绝对回文数,即其十,二进制均为回文,输入一个n值(<=100000),判断其是否为绝对回文数(二进制最前面的0不能算) ,若不是,输出”no”(不包括引号),若是,请按格式十进制值(二进制值),比如n=99时,其为绝对回文数,则输出99(1100011) 。 Input 一个n值。 Output 一行,按文中要求输出相应结果。 Sample Input 99 Sample Output 99(1100011) Source

?var ? i,j,n,l,l2:longint; ? a,b:array[1..100] of longint; ? bbt,flag:boolean; ?begin ? readln(n); ? l:=0; j:=n; ? while j<>0 do begin ? inc(l); ? a[l]:=j mod 10; j:=j div 10; ? end; ? l2:=0; j:=n; ? while j<>0 do begin ? inc(l2); ? b[l2]:=j mod 2; j:=j div 2; ? end; ? flag:=true; bbt:=true; ? for i:=1 to l div 2 do if a[i]<>a[l-i+1] then begin ? bbt:=false; break; ? end; ? if not bbt then flag:=false; ? bbt:=true; ? for i:=1 to l2 div 2 do if b[i]<>b[l2-i+1] then begin ? bbt:=false; break; ? end; ? if not bbt then flag:=false; ? if flag then begin ? for i:=1 to l do write(a[i]); write('('); ? for i:=1 to l2 do write(b[i]); ? writeln(')'); ? end ? else writeln('no'); ?end.

数据结构课程设计回文数问题

湖南科技学院 课程设计报告 课程名称:数据结构课程设计 课程设计题目:02、回文问题 系: 专业: 年级、班: 姓名: 学号: 指导教师: 职称: 2011年12月

目录 1.问题描述 ----------------------------------------------------------------------3 2.具体要求 ----------------------------------------------------------------------3 3.测试数据 ----------------------------------------------------------------------3 4.算法思想 ----------------------------------------------------------------------3 5.模块划分 ----------------------------------------------------------------------4

6.数据结构 ----------------------------------------------------------------------4 7.源程序 ------------------------------------------------------------------------7 8.测试情况 --------------------------------------------------------------------14 9.设计总结 --------------------------------------------------------------------14 10.参考文献 --------------------------------------------------------------------15 一、问题描述

C++回文数的形成

C++回文数的形成 回文数的形成规则不知道数学上有没有证明。如果有的话,朋友可以告诉我,这里通过编程验证。 规则:任意的一个的十进制的整数,将其转过来后和原来的整数相加,得到新的整数后重复以上步骤,最终可以得到一个回文数。 #include #define MAX 2147483648 //限制M+N的范围 long re(long int a)//求输入整数的反序 { long int t; for(t=0;a>0;a/=10)//将整数反序 t=t*10+a%10; return t; } int nonre(long int s)//判断给定的整数是否为回文数 { if(re(s)==s) return 1;//是返回1 else return 0;//不是返回0 } void main() { long int n,m; int count=0; printf("please input a number optionaly:"); scanf("%ld",&n);

printf("The genetation process of palindrome:\n"); while(!nonre((m=re(n))+n))//判断整数与其反序相加后是否为回文数{ if((m+n)>=MAX)//超过界限输出提示信息 { printf("input error,break.\n"); break; } else { printf("[%d]:%ld+%ld=%ld\n",++count,n,m,m+n); n+=m;//累加 } } printf("[%d]:%d+%ld=%ld\n",++count,n,m+n); printf("Here we reached the aim at last.\n");//输出得到的回文数}

显示前100个回文素数

回文素数是指一个数同时为素数和回文数。例如:131是一个素数,同时也是一个回文素数。数字313和757也是如此。编写程序,显示前100个回文素数。每行显示10个数并且标准对齐,如下所示: 程序如下: public class xt { public static void main(String[] args){ int count = 1; int i = 2 ; while(count <= 100){ if(isPrime(i) && isPalindrome(i)){ if(count % 10 == 0){ System.out.printf("%10s\n", i); } else{ System.out.printf("%10s", i); } count ++; i++; } else{ i++; } } } //判断一个数是否为素数 private static boolean isPrime(int Number){ boolean primeBool = true; for(int i = 2;i <= (int)(Math.sqrt(Number));i++){ if(Number % i == 0){ primeBool = false; break; } } return primeBool;

} //判断一个数是否为回文数 private static boolean isPalindrome(int number){ if(number == reverse(number)){ return true; } else{ return false; } } //求一个数的反向数 private static int reverse(int number1){ int number2 = 0; while(number1 != 0){ number2 = number2 * 10 +number1 % 10; number1 = number1 / 10; } return number2; } }

java实验报告回文数

《Java程序设计》实验报告 实验二:回文数 专业班级:通信工程2008级1班姓名: 学号: 时间: 实验二:回文数 1、实验目的:

让学生掌握if-else if多分支语句。 2、实验要求: 编写一个java应用程序,实现如下功能: ※用户从键盘输入一个1~99999之间的整数。 ※程序判断这是几位数,并判断这个数是否是回文数。(回文数是指将该数含有的数字逆序排列后得到的和原数相同。如12121和3223都是回文数。) 3、程序效果图(各位同学的效果图应该各不相同!) 4、程序代码(主要语句有注释!) 5、实验思考问题

6、实验总结及心得程序模板:

Number.java import java.util.*; public class Number { public static void main(String args[]) { int number=0,d5,d4,d3,d2,d1; Scanner reader=new Scanner(System.in); System.out.println("从键盘输入一个1至99999之间的数"); while(reader.hasNextInt()) { number=reader.nextInt(); if(【代码1】) // 判断number在1至99999之间的条件 { 【代码1】// 计算number的最高位(万位)d5 【代码2】// 计算number的千位d4 【代码3】// 计算number的百位d3 d2=number%100/10; d1=number%10; if(【代码4】) // 判断number是5位数的条件 { System.out.printf("\n%d是5位数", number); If (【代码5】) // 判断number是回文数的条件 { System.out.printf("\t%d是回文数", number); } else { System.out.printf("\t%d不是回文数", number); } } else if (【代码6】) // 判断number是4位数的条件 { System.out.printf("\n%d是4位数",number); If (【代码7】) // 判断number是回文数的条件码 { System.out.printf("\t%d是回文数", number); } else { System.out.printf("\t%d不是回文数",number); } } else if (【代码8】) // 判断number是3位数的条件

关于10亿以内回文式质数的问题

关于1亿以内回文式质数的问题 第一种方法: 思路:先定义两个函数,一个用于判断一个整数M是否为质数,一个用于判断一个整数M是否为回文数 #include #include #include int hw(int m){//判断M是否为回文数,是返回1,否返回0 int x=0,y; y=m; while(y){ x=x*10+y%10; y=y/10; } if(m==x)return 1; else return 0; } int ss(int m){//判断M是否为质数,是返回1,否返回0 int i; for(i=2;i<=sqrt(m);i++) if(!(m%i))return 0; return 1; } main(){ int m; struct timeb tp; double tim1,tim2; /*在程序开头,主函数内*/ ftime(&tp); tim1 =tp.time+https://www.360docs.net/doc/3218348586.html,litm/1000.0;//获得程序开始时间 for(m=2;m<100000000;m++) if(ss(m) && hw(m)) printf("%10d",m); ftime(&tp); tim2 =tp.time+https://www.360docs.net/doc/3218348586.html,litm/1000.0;//获得程序结束时间 printf("\n总耗时:%g秒\n",tim2-tim1); /*输出两个时间差*/ } 总耗时然不:739秒多,这显是我想要的结果。 分析原因,可能是花在判断质数的时间太长了 第二种方法:交换一下两个判断函数的位置后再运行: 总耗时:11.297秒。可以更快吗? 第三种方法:考虑到偶数不可能为质数,所以将主函数的 for(m=2;m<100000000;m++) 修改为: printf("%10d",2);

求出500以内回文数微机原理课程设计说明书

目录 摘要 (1) 1.设计目的和要求 (2) 1.1设计目的 (2) 2.程序设计说明 (2) 2.1 程序设计流程图 (3) 2.2 程序段落说明 (4) 2.2.1程序定义段 (4) 2.2.3回文数判定程序设计 (5) 2.2.4 程序结束程序段 (7) 3.程序调试及结果 (7) 小结及体会 (8) 参考文献 (9) 附录 (10)

摘要 日常生活中,计算机能处理的信息是多种多样的,如各种数据的查询与计算,不同的文字符号,各种图像信息。利用计算机的逻辑性与它的告诉计算,我们可以解决许多趣味性的数学问题,用汇编语言程序能实现数的查找计算及显示,能在MF2KI中演示,编写一定功能的程序。 此次课程设计基于我们这学期所学的《微机原理与接口技术》,要求我们运用书上知识解决汇编语言编程问题,程序要求能将实现大小写字母转换,并且输入查找字符时,能显示该字符在字符串中的位置,若原字符串中没有该字符,则在屏幕上显示相应的提示语句。程序能实现人机交互功能,有一定的提示语句。 汇编语言设计时先绘制流程图,分配存储空间,编写程序,对于我们熟悉汇编语言程序的编写,程序思路的设计有很大的帮助,应严肃认真对待。 关键词:汇编语言编程回文数的寻找

求出500以内的回文数 1.设计目的和要求 1.1设计目的 (1)进一步建立微机系统的概念,加深对系统的理解和认识,培养学生应用微型计算机解决实际问题的能力; (2)进一步学习和掌握汇编语言程序的编写和应用的方法,通过较大规模程序的编写,提高编写汇编语言程序的水平和学习程序调试方法。 (3)进一步熟悉微机最小系统的构成及常用接口芯片的使用,提高系统设计能力。 a)设计要求 1.设计汇编语言程序,实现求出500 以内的回文数的功能,具体功能要求如下:如果一个数从左边和从右边读都是相同的数,就称它为回文数,例如383,求出500 以内的回文数并输出显示。要求:提示数据范围为0-500;换行显示结果。2.根据功能要求绘制程序流程图、编写完整的汇编语言程序并上机调试 2.程序设计说明 汇编语言要求设计一个程序来找出0到500以内的回文数,如果一个数从左边和从右边读都是相同的数,就称它为回文数,故设计此程序思维很简单,根据回文数的特性,1至9都为回文数,而在10到500间的回文数需另外求出,因此本程序设计采用分支结构与循环结构相结合。 首先,设计一循环程序,在1到500间对每个数进行判断,因此要循环500次,在执行程序前,应先定义一个变量,为简化程序,由上述已知1至9都为回文数,故先比较此数与10的大小。从1开始,如果小于10,可以直接输出; 如果大于10,将此数与100比较,如小于100,将十位与个位相比较,相同则为回文数,执行输出指令,不同则执行加一指令继续循环;如此数大于100,将个位与百位相比较,相同则为回文数,执行输出指令,不同则执行加一指

回文数问题求解

C++回文数进制判断问题求解 题目描述 我们把从左往右和从右往左念起来相同的数字叫做回文数。例如,75457就是一个回文数。 当然某个数用某个进制表示不是回文数,但是用别的进制表示可能就是回文数。 例如,17是用十进制表示的数,显然它不是一个回文数,但是将17用二进制表示出来是10001,显然在二进制下它是一个回文数。 现在给你一个用十进制表示的数,请你判断它在2~16进制下是否是回文数。 输入 输入包含多组测试数据。每组输入一个用十进制表示的正整数n(0 using namespace std; //设置一个设置i(2<=i<=16)进制函数,一个变进制函数,一个测试是否是回文数的函数 int ax[15]; int o=0; int set(int i,int j) //i为进制,j为给定数字 { int a=0,sum=0; int k=1; while(j!=0) { a=j%i; j/=i; sum+=(a*k); k*=i; } return sum;

} void change(int i) //i为给定数字 { int x=0; for(int m=2;m<=16;m++) { x=m-2; ax[x]=set(m,i); } } void test1(int i,int m) //i为给定数字,m为进制(不输出){ int s,x=0; s=i; while(s>0) { x=x*m+s%m; s=s/m; } if(x==i) { o++; } } void test(int i,int m) //i为给定数字,m为进制(输出){ int s,x=0; s=i; while(s>0) { x=x*m+s%m; s=s/m; } if(x==i) { cout<<" "<

回文数的java程序

/*请用户输入一个任意长度的整型数(当然不能无限长),编写程序判断该数字是否为 整数,并且输出结果告诉用户。回文:如:1569,因为9651!=1569,所以1569不是回文整数, 又如:1278721,依据以上方法判断它是回文整数。 */ package shifoushihuiwen; import java.util.Scanner; public class ShiFouShiHuiWen { public static void main(String[] args) { Scanner input = new Scanner(System.in); System.out.print("Please enter your number: "); int number=input.nextInt(); int panDuan; panDuan=isPalindrome(number); //调用函数isPalindrome(number),并返回一个整型数 if(panDuan==1) System.out.println( number+" is palindrome"); else System.out.println(number+" is not palindrome");//输出结果 } public static int isPalindrome(long number1) { int weiShu=0,chuShu=1,shang=1; while (shang!=0) { shang=(int)number1/chuShu; weiShu=weiShu+1; chuShu=chuShu*10; } weiShu=weiShu-1; //计算number的位数 long number2=0,numberc,jiWei,quanZhi=1; numberc=number1; if (weiShu==1) return 1; //当number位数为一位时,它必是回文整数 else { for(int j=2;j<=weiShu;j++) quanZhi=quanZhi*10; for(long i=quanZhi;i>=1;i=i/10) { jiWei=number1/i; number2=number2+jiWei*quanZhi/i;

给定一个字符串,求这个字符串的最大回文数

题目:回文判断是一类典型的问题,尤其是与字符串结合后呈现出多姿多彩,在实际应用中比较广泛,下面介绍几个回文的问题。 首先我们要介绍一个什么叫回文数:回文,就是指一个字符串顺着读和反着读都是一样的字符串,例如madam,你我你,我爱我等等一些列的字符串 1、首先来判断一下一个字符串是否是回文字符串: [java]view plaincopyprint? 1public int palindromeNumber(String s, int low, int high) { 2if (low == high) 3return1; 4else if (low < high) { 5if (s.charAt(low) == s.charAt(high) && (high - low) == 1) //防止出现abba等情况 6return1; 7if (s.charAt(low) == s.charAt(high) && (high - low) != 1) //这是类似aba的情况 8return palindromeNumber(s, low + 1, high - 1); 9else 10return0; 11 } else 12return0; 13 } 上面的这个方法,如果输入的字符串是回文字符串的话,则输出1,如果不是的话,输出0,2、已经明白了如何判断一个字符串是否是回文数,接下来我们就要求出一个给定字符串中最大的回文数是多少,就是把这个回文数的长度打出来 [java]view plaincopyprint? 14package programmer; 15 16import java.util.Scanner; 17 18/* 19 * 回文判断是一类典型的问题,尤其是与字符串结合后呈现出多姿多彩,在实际中使用也 20 * 比较广泛,而且也是面试题中的常客,所以本文就结合几个典型的例子来体味下回文之趣。 21 * 回文,英文palindrome,指一个顺着读和反过来读都一样的字符串,比如 madam、 22 * 我爱我,这样的短句在智力性、趣味性和艺术性上都颇有特色,中国历史上还有很多

相关文档
最新文档