回文数

回文数

别说谁变了你拦得住时间么 提交于 2020-12-22 06:57:08
/* 文件名称: 回文数2 -- 双端队列解决 创建日期: 2013/3/29 */ #include <iostream> using namespace std; const int maxNum = 111; int main() { //遍历查找回文数 for (int n = 11; n <= maxNum; n++) { //定义双端队列, 队尾指针, 队头指针 int a[10] = {0}, rear = 0, head = 0; int base = 1, m = n * n; while (m / base) { //将数据按位分解,并结果将数据压入队尾 a[rear] = (m %(base * 10) - m % base) / base; rear++; base *= 10; } //判断是否为回文数 while (a[rear - 1] == a[head]) { rear--;//队尾出列 head++;//队头出列 } //打印输出 if (rear < head) cout << n << "\t" << n * n << endl; } return 0; } 来源: oschina 链接: https://my.oschina.net/u/862164/blog/121812

回文数

此生再无相见时 提交于 2020-12-20 05:08:10
问题描述: “回文数”是一种数字。如:98789,这个数字正读是98789,倒读也是98789,正读倒读一样,所以这个数字就是回文数。 编程判断一个数是否是回文数。 我的代码: n=list(raw_input("please input a number: ")) zx=dx=[] zx=n dx=n[::-1] for i in range(len(n)/2): if zx[i]==dx[i]: print "%d's number is a Palindrome number..." %(i+1) else: print "%d's number is not a Palindrome number..." %(i+1) 我的思路: 首先让输入的字符格式的数字list化,得到一个包含各数字的列表,此时的列表是正向的,赋值给zx,然后使用切片的方式翻转原列表并赋给dx,这样就得到了正序和倒序的列表; 比较的时候是直接比较两个列表的元素的,而且比较次数为列表长度除以2,如3位数121只比较一次1即可,4位数如1221比较1和2两次即可。 示例代码: def fun(n): a = [] while n: a.append(n % 10) n /= 10 for i in xrange(len(a)): if a[i] != a[-i-1]: break else: print u

最小回文数

余生长醉 提交于 2020-03-10 11:14:47
题目描述 回文数是从左向右读和从右向左读结果一样的数字串。 例如:121、44 和3是回文数,175和36不是。 对于一个给定的N,请你寻找一个回文数P,满足P>N。 满足这样条件的回文数很多,你的任务是输出其中最小的一个。 输入格式 1行,一个正整数N。N的数值小于10^100,并且N没有前导0。 输出格式 你的程序应该输出一行,最小的回文数P(P>N)。 输入输出样例 输入 #1 复制 44 输出 #1 复制 55 说明/提示 50%的数据,N<10^9 100%的数据,N<10^100 输入一个整数 ABCD ,若整数ABBA 比 ABCD 大,则 ABBA 就是比它大的最小回文数,然后就可以直接输出这个答案了。 而如果 ABBA 比 ABCD 要小(或等于)那我们就要找到比 ABBA 大的下一个回文数。 不难发现它就是:ACCA 且 C=B+1。 #include<cstdio> #include<cstring> using namespace std; char a[1002]; int b[1002],s[1002],t[1002]; int l,mid1,ls=0; void add(){ int i,x,y; i=mid1+1; x=b[i]+1; b[i]=x%10; y=i; if(l%2==0){ b[i-1]=b[i]; y=i-1; } while(x

东华oj-进阶题第44题-双重回文数

我的梦境 提交于 2020-03-06 18:44:36
44 双重回文数 作者: xxx时间限制: 1S章节: 一维数组 问题描述 : 如果一个数从左往右读和从右往左读都是一样,那么这个数就叫做回文数。例如,12321就是一个回文数,而77778就不是。当然,回文数的首和尾都应是非零的,因此0220就不是回文数。事实上,有一些数(如21),在十进制时不是回文数,但在其它进制(如二进制时为10101)时就是回文数。 编一个程序,从文件读入两个十进制数 N (1<= N <= 15) S (0 <S <10000) 然后找出前N个满足大于S且在两种或两种以上进制(二进制至十进制)上是回文数的十进制数,输出到文件上。 本问题的解决方案不需要使用大于4字节的整型变量。 输入说明 : 只有一行,用空格隔开的两个数N和S。 输出说明 : N行, 每行一个满足上述要求的数,并按从小到大的顺序输出。 输入范例 : 3 25 输出范例 : 26 27 28 代码: /* T44 双重回文数 */ # include <stdio.h> # include <string.h> # define MAX_SIZE 100 int isSymNum ( char num [ ] ) ; void toXScale ( char res [ ] , int n , int x ) ; int main ( ) { int i = 0 , j = 0 ; int

回文数的变换

£可爱£侵袭症+ 提交于 2020-03-03 01:28:21
题目:一个正整数,如果高低位交换和原数相等,那么称这个数为回文数。 问题:任意一个正整数,如果其不是回文数,将该数高低位以后和原数相加得到一个新的数,如果不是回文数,重复这个变换,直到得到一个回文数为止。 例如 :57变换后得到132(57+75),132得到363(132+231),363是一个回文数。 曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。 输入格式 输入一行一个正整数n。 输出格式 输出第一行一个正整数,表示得到一个回文数的最少变换次数。 接下来一行,输出变换过程,相邻的数之间用“—>”连接。 保证最后的生成数在int范围类 样例输入 349 样例输出 3 349—>1292—>4213—>7337 代码如下: # include <iostream> using namespace std ; int arr [ 1005 ] ; int shu [ 1005 ] ; bool judge ( int x ) { int cnt = 0 ; while ( x ) { shu [ cnt ++ ] = x % 10 ; x / = 10 ; } for ( int c = 0 ; c < cnt / 2 ; c ++ ) { if ( shu [ c ] != shu [ cnt

leetcode_9_回文数

安稳与你 提交于 2020-03-02 18:39:45
题目 分析 判断是否为回文数,即判断一个整数倒过来是否与原来相等,那么显然,负数不是回文数。将一个整数倒过来,通过一个简单的循环即可实现。 不过 ,还可以进一步的优化,即不是将整个整数都倒过来,然后与原整数比较是否相等,将整数的一半倒过来即可!!! 代码 class Solution { public boolean isPalindrome ( int x ) { if ( x < 0 ) ) return false ; int _x = x , y = 0 ; while ( x > 0 ) { y = y * 10 + x % 10 ; x = x / 10 ; } if ( _x == y ) return true ; return false ; } } 将上面代码优化,第一,整数如果末尾有0的(整数本身就是0除外),则必定不是回文数,直接判断返回即可。第二,不需要将整个整数完全反转,只需要反转一般即可,整数的位数有可能是偶数有可能是奇数,在return返回结果的时候,将这两种情况都考虑进来即可。 class Solution { public boolean isPalindrome ( int x ) { if ( x < 0 || ( x % 10 == 0 && x != 0 ) ) return false ; int y = 0 ; while ( x >

xtu p1143 回文数

久未见 提交于 2020-03-02 15:11:30
描述 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 10进制数 56,将 56加 65(即把56从右向左读),得到 121是一个回文数。又如,对于10进制数87: STEP1 : 87+78 = 165 STEP2 : 165+561 = 726 STEP3 : 726+627 = 1353 STEP4 : 1353+3531 = 4884 在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N(3≤N≤10或N=16)进制数 M.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出**“Impossible”** 。 格式 输入格式 给定一个N(3≤N≤10或N=16)进制数 M 输出格式 最少几步。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible”。 样例 输入样例 9 87 输出样例 6 限制 时间限制: 1000 ms 内存限制: 65536 KB struct bign { int d [ 1000 ] ; int len ; bign ( ) { memset ( d , 0 , sizeof ( d ) ) ; len = 0 ; } } ; bign change ( char str [ 1000 ] ) {

试题 算法训练 回文数

跟風遠走 提交于 2020-03-02 07:30:59
试题 算法训练 回文数 题目描述: 资源限制 时间限制:1.0s 内存限制:256.0MB 问题描述   若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。   例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数。 又如:对于10进制数87:   STEP1:87+78 = 165 STEP2:165+561 = 726   STEP3:726+627 = 1353 STEP4:1353+3531 = 4884 在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884。 写一个程序,给定一个N(2<=N<=10或N=16)进制数M(其中16进制数字为0-9与A-F),求最少经过几步可以得到回文数。   如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible!” 输入格式   两行,N与M 输出格式   如果能在30步以内得到回文数,输出“STEP=xx”(不含引号),其中xx是步数;否则输出一行”Impossible!”(不含引号) 样例输入 9 87 样例输出 STEP=6 注意: 中间加法计算过程需将字符数组转化为普通int型数组(这么做方便计算)。 AC代码: # include <stdlib.h> # include <stdio.h> # include

回文数

你离开我真会死。 提交于 2020-03-01 09:40:34
题目来源力扣第九题,链接:https://leetcode-cn.com/problems/palindrome-number 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 思路0: 1. 题目给出模板为int类型,故默认为是int类型数据。 2. 如果整数是负数则直接判定false 3. 如果整数是正整数且只有一位,则直接判定true 4. 将数据进行反转处理,若与原数据相等,则返回true,反转处理见: https://www.cnblogs.com/yulongzhou/p/12385877.html 5. 空间复杂度 O(1), 时间复杂度O(log(x)) 代码: 1 #include <iostream> 2 3 using namespace std; 4 5 class Solution { 6 public: 7 bool isPalindrome(int x) { 8 if (x

js-回文数

|▌冷眼眸甩不掉的悲伤 提交于 2020-02-29 04:16:56
回文数 设n是一任意自然数。若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数。 //回文数 let readline = require("readline-sync"); console.log("请输入数字:"); let num = parseInt(readline.question("")); let newNum = 0; for(temp=num;temp!=0;temp=parseInt(temp/10)){ newNum = newNum*10+temp%10; } newNum===num?console.log("是回文数"):console.log("不是回文数"); 来源: https://www.cnblogs.com/CccK-html/p/11381018.html