回文数

1106: 回文数(函数专题)

北战南征 提交于 2020-02-12 12:15:50
1106: 回文数(函数专题) 题目描述 一个正整数,如果从左向 右读(称之为正序数)和从右向左读(称之为倒序数)是一样的,这样的数就叫回文数。输入两个整数m和n(m<n),输出区间[m,n]之间的回文数。 输入 输入两个正整数m和n,输入保证m<n。 输出 按从小到大的顺序,输出m到n之间的回文数, 每个数后面有一个空格。 样例输入 100 200 样例输出 101 111 121 131 141 151 161 171 181 191 # include <stdio.h> int HW ( int n ) { int x , sum = 0 ; while ( n > 0 ) { x = n % 10 ; //每次分离出最右位的数字 n = n / 10 ; //去除最右位数字 sum = sum * 10 + x ; //实现数字的左右逆转 } return sum ; } int main ( ) { int m , n , i ; scanf ( "%d%d" , & m , & n ) ; for ( i = m ; i <= n ; i ++ ) { if ( i == HW ( i ) ) printf ( "%d " , i ) ; } return 0 ; } 思路:利用函数计算某整数的倒序数,如果与该整数相等,即为回文数。 来源: CSDN 作者: 木右加木

力扣 OJ 9. 回文数

感情迁移 提交于 2020-02-09 09:18:23
题目: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 代码: class Solution { public: bool isPalindrome(int x) { if (x < 0)return false; vector<int>num; while (x) { num.insert(num.end(), x % 10); x /= 10; } int len = num.size(); for (int i = 0, j = len - 1; i < j; i++, j--) { if (num[i] - num[j])return false; } return true; } }; 来源: CSDN 作者: csuzhucong 链接: https://blog.csdn.net/nameofcsdn/article/details/104224948

【蓝桥杯】回文数字(暴力简单题)

心不动则不痛 提交于 2020-02-08 06:48:36
题目描述 观察数字:12321,123321 都有一个共同的特征,无论从左到右读还是从右向左读,都是相同的。这样的数字叫做:回文数字。 本题要求你找到一些5位或6位的十进制数字。满足如下要求: 该数字的各个数位之和等于输入的整数。 输入 一个正整数 n (10< n< 100), 表示要求满足的数位和。 输出 若干行,每行包含一个满足要求的5位或6位整数。 数字按从小到大的顺序排列。 如果没有满足条件的,输出:-1 样例输入 44 样例输出 99899 499994 589985 598895 679976 688886 697796 769967 778877 787787 796697 859958 868868 877778 886688 895598 949949 958859 967769 976679 985589 994499 解题思路 本来想用dfs,后来发现只要求输出的回文数字为5位或者6位 于是用了三层循环,从1循环到9 先算出5位再算6位的 但是wa了三次,发现漏了一种情况,回文数字第一个和最后一个不能为0,其他的数字都可以是0. 代码 package 回文数字; import java.util.Scanner; public class Main { public static void main(String[] args) { // TODO Auto

B1079 延迟的回文数 (20分)

女生的网名这么多〃 提交于 2020-02-07 04:49:50
【题目描述】 给定一个 k+1 位的正整数 N,写成 a​k​​⋯a​1​​a​0​​ 的形式,其中对所有 i 有 0≤a​i​​<10 且 a​k​​>0。N 被称为一个回文数,当且仅当对所有 i 有 a​i​​=a​k−i​​。零也被定义为一个回文数。 非回文数也可以通过一系列操作变出回文数。首先将该数字逆转,再将逆转数与该数相加,如果和还不是一个回文数,就重复这个逆转再相加的操作,直到一个回文数出现。如果一个非回文数可以变出回文数,就称这个数为延迟的回文数。(定义翻译自 https://en.wikipedia.org/wiki/Palindromic_number ) 给定任意一个正整数,本题要求你找到其变出的那个回文数。 【输入格式】 输入在一行中给出一个不超过1000位的正整数。 【输出格式】 对给定的整数,一行一行输出其变出回文数的过程。每行格式如下 A + B = C其中 A 是原始的数字,B 是 A 的逆转数,C 是它们的和。A 从输入的整数开始。重复操作直到 C 在 10 步以内变成回文数,这时在一行中输出 C is a palindromic number.;或者如果 10 步都没能得到回文数,最后就在一行中输出 Not found in 10 iterations.。 【输入样例 1】 97152 【输出样例 1】 97152 + 25179 =

【C语言】判断回文数

旧街凉风 提交于 2020-02-06 05:28:51
小菜鸡更新第一篇博客啦(有错希望能够指正且多多包涵哈)! 总结一下"回文数" 1. 数字回文数 就普通举例:‘12321’‘5665’之类的都是回文数(即每个数字正排序和逆排序的结果是一样的); 那怎么实现呢? 首先最容易想到的当然是 将 原数 的 逆序数 表示一遍 再判断两者是否相等。 那么有什么比较容易的算法可以简便地把上述步骤呈现出来呢? 来看一段代码片: int main ( ) { int number ; scanf ( "%d" , & number ) ; //输入原数 int new_number = 0 ; int s = number ; //定义一个new_number来装原数的逆排序数 //此处需要定义一个s来代替原本输入的数,不然最后比较新数与原数的时候会出错(即原数经变化不再是原数了) while ( s != 0 ) //此处的循环条件 即 s/10 到该数的最后一位数 若到了最后一位,s/10的结果必为0 { new_number = new_number * 10 + s % 10 ; //一个数除以10的余数就是该数最后一位,每次拿到一个余数,都用来构造新数,新数=新数*10+余数 s / = 10 ; //一个数除以10的商就是排除掉最后一位后的数 } if ( new_number == number ) //结果出来了就与原数进行比较

蓝桥杯,特殊回文数,Python

会有一股神秘感。 提交于 2020-02-05 12:26:33
题目 问题描述   123321是一个非常特殊的数,它从左边读和从右边读是一样的。   输入一个正整数n, 编程求所有这样的五位和六位十进制数,满足各位数字之和等于n 。 输入格式   输入一行,包含一个正整数n。 输出格式   按从小到大的顺序输出满足条件的整数,每个整数占一行。 样例输入 52 样例输出 899998 989989 998899 数据规模和约定   1<=n<=54。 解法一 我们首先想到的就是遍历所有五位数和六位数,将数字转成字符串再逆转然后判断是否为回文数,接着求各位数字之和判断是否等于n,满足以上两个条件就是答案。 n = int(input('')) for i in range(10000, 1000000): num = str(i) s = sum(int(j) for j in num) if s == n and num == num[::-1]: print(num) 以上代码提交显示运行超时。仔细一想不难发现这里其实是二重循环,因为sum()函数求和过程其实也是一个循环,从而导致算法复杂度增大。下面我们看改进代码: n = int(input('')) for i in range(10000, 1000000): num = str(i) if num == num[::-1]: if n == sum(int(j) for j in

leetcode-9. 回文数

老子叫甜甜 提交于 2020-02-05 08:09:41
题目 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 来源:力扣(LeetCode) 链接: 9. 回文数 著作权归领扣网络所有。商业转载请联系官方授权,非商业转载请注明出处。 分析 这道题挺简单的,如果按照常规的方法,分离各个数位,然后再判断在对称位置上的数字是否相等即可。不过,比较麻烦,效率也不高。 仔细想想,一个数从右往左不正是其逆序数吗?我们将一个数的逆序数的大小求出来,如果它和本省相等,那么这个数就一定是回文数。 另外,可以先对一些特殊情况,如负数等等先做一个判断。注意整型的回文数不会溢出的,整型取值范围为==-2147483648 ~ 2147483647==。 代码 class Solution { public boolean isPalindrome ( int x ) { //负数和10的倍数不是回文数 if ( x < 0 || ( x % 10 == 0 && x != 0 ) ) { return false ; } /

蓝桥杯准备(1.4)回文数

家住魔仙堡 提交于 2020-02-05 07:07:07
一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如 121121121,233223322332 都是回文数,13,456713,456713,4567 不是回文数。 任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数不是回文数,重复这个变换,直到得到一个回文数为止。例如,575757 变换后得到 132(57+75)132(57 + 75)132(57+75),132132132 得到 363(132+231)363(132 + 231)363(132+231),363363363 是一个回文数。 曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定能得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。 输入 349 输出 3 349—>1292—>4213—>7337 import java.util.Scanner; public class 回文数 { public static void main(String[] args) { Scanner scan=new Scanner(System.in); StringBuffer result=new StringBuffer(); int n=scan.nextInt(); int count=0; while(true){

蓝桥杯-Python 基础练习 回文数

十年热恋 提交于 2020-02-05 03:50:53
资源限制 时间限制:1.0s 内存限制:512.0MB 问题描述 1221是一个非常特殊的数,它从左边读和从右边读是一样的,编程求所有这样的四位十进制数。 输出格式 按从小到大的顺序输出满足条件的四位十进制数。 代码如下: for i in range(1,10): for j in range(0,10): print(i,end='') print(j,end='') print(j,end='') print(i,end='\n') 来源: CSDN 作者: zapata_o 链接: https://blog.csdn.net/weixin_44626823/article/details/104174037

LeetCode 4.回文数

天大地大妈咪最大 提交于 2020-02-01 15:05:43
题目描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 代码如下 public boolean isPalindrome(int x) { StringBuilder stringBuilder=new StringBuilder(x+""); String yString=stringBuilder.reverse().toString(); if (yString.equals(x+"")) { return true; } return false; } 来源: https://www.cnblogs.com/Transkai/p/12248418.html