回文数

LeetCode 9.回文数

血红的双手。 提交于 2020-01-31 16:29:26
题目链接: https://leetcode-cn.com/problems/palindrome-number/ 题目描述:判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 解法一:这个解法是我第一时间想到的方法。按照示例,负数一定不是回文数,0一定是回文数,正数就把每一位数字分离开存放到两个向量里,对其中一个向量做一下反转,然后依次比较两个向量中的内容。这种方法的时间和空间复杂度都是不高的。 解法二:这个方法是官方题解中发布的方法。对数字的一半进行反转,为什么不把数字进行反转呢,因为反转后的数字有可能超过int,而反转一半就不会出现这个问题。如数字1221,1221 % 10 获得最后一位数字1,然后1221 / 10 得到122, 122 % 10 得到2,1 * 10 + 2 得到反转一半后的数字12, 继续下去就会得到更多的反转数字。那如何判断已经到达原始数字位数的一半呢,就是反转的数字大于原始数字,就证明已经处理了一半的数字。然后比较原始数字

B1079 延迟的回文

和自甴很熟 提交于 2020-01-30 12:18:11
给定一个 k + 1 位的正整数 N,写成 a ​ k ​​ ⋯ a ​ 1 ​​ a ​ 0 ​​ 的形式,其中对所有 i 有 0 且 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

蓝桥杯PREV-21 历届试题 回文数字

血红的双手。 提交于 2020-01-30 03:54:06
蓝桥杯PREV-21 历届试题 回文数字 问题描述   观察数字: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 样例输入 60 样例输出 -1   很显然判断条件有两个,一个是每位相加是固定数,另一个是满足回文,那就设两个函数分别来判断这两个条件,将满足的数字存放在一个数组里,再输出就完事。不设函数也可以,就是写起来容易乱。 # include <iostream> # include <bits/stdc++.h> using namespace std ; /* run

LeetCode:9.回文数

≯℡__Kan透↙ 提交于 2020-01-25 07:52:25
题目: 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1 : 输入 : 121 输出 : true 示例 2 : 输入 : - 121 输出 : false 解释 : 从左向右读 , 为 - 121 。 从右向左读 , 为 121 - 。因此它不是一个回文数。 示例 3 : 输入 : 10 输出 : false 解释 : 从右向左读 , 为 01 。因此它不是一个回文数。 源码: class Solution { public boolean isPalindrome ( int x ) { if ( x < 0 ) { return false ; } String s = x + "" ; int left = 0 ; int right = s . length ( ) - 1 ; while ( left < right ) { if ( s . charAt ( left ) != s . charAt ( right ) ) { return false ; } left ++ ; right -- ; } return true ; } } 来源: CSDN 作者: qq_45239139 链接: https://blog.csdn.net/qq_45239139/article/details/104061484

1309:【例1.6】回文数(Noip1999)

半世苍凉 提交于 2020-01-24 17:06:46
1309:【例1.6】回文数(Noip1999) 时间限制: 1000 ms 内存限制: 65536 KB 【题目描述】 若一个数(首位不为零)从左向右读与从右向左读都是一样,我们就将其称之为回文数。例如:给定一个 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.求最少经过几步可以得到回文数。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible” 。 【输入】 给定一个N(2<N<=10或N=16)进制数M。 【输出】 最少几步。如果在30步以内(包含30步)不可能得到回文数,则输出“Impossible”。 【输入样例】 9 87 【输出样例】 6 【来源】 No #include <cstdio> #include <cstring> #include <iostream> using namespace std; int a[101],b[101],n,ans,i; void init(int a

LeetCode#9回文数

时光毁灭记忆、已成空白 提交于 2020-01-24 04:52:00
题目描述 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 简单分析 显然负数不是回文数,同时小于十的自然数为回文数,不转换为字符串时可以将当前整数进行倒序,看看是否和原数一致,一致的话就是回文数。此时特殊考虑边界值2147483647,显然不是回文数。 代码 class Solution { public: bool isPalindrome(int x) { if(x<0||x==2147483647){ return false; } else if(x>=0&&x<10){ return true; } int tmp = x; int num = 0; while(tmp!=0){ num = tmp%10+num*10; tmp = tmp /10; } if(x == num){ return true; } return false; } }; 来源: CSDN 作者: DUT

Leecode--回文数

£可爱£侵袭症+ 提交于 2020-01-23 03:39:42
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 代码思路: class Solution { public : bool isPalindrome ( int x ) { if ( x < 0 ) return 0 ; int y = x ; long n = 0 ; while ( x != 0 ) { n = n * 10 + x % 10 ; x = x / 10 ; } if ( y == n ) return 1 ; else return 0 ; } } ; 解题思路: 从题干知道负数不能为回文数,将这个数倒过来如果相等匹配,则为回文数。 用long的缘故是,n = n * 10 + x %10; 这个语句会导致int溢出。 结果: 改进: 代码: class Solution { public : bool isPalindrome ( int x ) { if ( x < 0 || ( x % 10 == 0 && x != 0 ) )

力扣(C++): 回文数

二次信任 提交于 2020-01-22 13:13:51
题目描述 判断一个整数是否是回文数。回文数是指正序从左向右和倒序从右向左读都是一样的整数. 示例1 输入: 121 输出: true 示例2 输入: -121 输出: false 解释: 从左向右读,为 -121 .从右向左读, 为 121- .因此它不是一个回文数. 示例3 输入: 10 输出: false 解释: 从右向左读,为 01 .因此它不是一个回文数. 题目来源力扣网. 代码示例" class Solution { public: bool isPalindrome(int x) { if (x < 0) { return false; } unsigned int sum = 0; int tmp; for (int i = x; i; i /= 10) { tmp = i % 10; sum = sum * 10 + tmp; } if (sum == x) { return true; } return false; } }; 来源: CSDN 作者: 橙子汁_ 链接: https://blog.csdn.net/weixin_44781107/article/details/103937433

9. 回文数

吃可爱长大的小学妹 提交于 2020-01-18 23:56:53
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 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 > nums ; while ( x / 10 ) { int a = x % 10 ; nums . push_back ( a ) ; x = x / 10 ; } nums . push_back ( x ) ; for ( int i = 0 , j = nums . size ( ) - 1 ; i < j ; i ++ , j -- ) { if ( nums [ i ] != nums [ j ] ) { return false ; } } return true ; } } ; 第二种解法

[NOIP1999]回文数 未完成

醉酒当歌 提交于 2020-01-16 20:53:29
未完成 题目: 洛谷 P1015回文数 计蒜客 [NOIP1999]回文数 缺乏的能力: 大数相加减(字符串)、任何进制数的运算运算。 未完成的代码: # include <iostream> # include <string> # include <cstring> using namespace std ; //N为进制,M为数值 char M [ c ] ; int N ; int ans = 0 ; bool judge_huiwen ( char * M ) { int length = strlen ( M ) ; for ( int i = 0 ; i < length / 2 ; i ++ ) if ( M [ i ] != M [ length - i - 1 ] ) return 0 ; return 1 ; } void add_reself ( M ) //字符串反转载相加 (考虑进制) { char re_M [ 1005 ] ; int length = strlen ( M ) ; for ( int i = 0 ; i < length ; i ++ ) //字符串反转 re_M [ i ] = M [ length - i - 1 ] ; //字符串看出数值载相加减 //大数运算 //玩不起玩不起。。。 } int main ( ) { cin