回文数

蓝桥杯 回文数(算法训练_Java)

余生颓废 提交于 2019-12-05 16:49:14
算法训练 回文数 时间限制: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 问题分析: 就是写一个高精度的任意进制加法,不断判断每次得到的结果是否是回文数即可 详细代码如下: import java.util.*; import java.math.*; public class Main { /

【蓝桥杯】 算法训练 回文数

不羁岁月 提交于 2019-12-05 16:48:40
问题描述   若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数。   例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数   又如:对于10进制数87:    S T E P 1 STEP1 S T E P 1 :87+78 = 165 S T E P 2 STEP2 S T E P 2 :165+561 = 726    S T E P 3 STEP3 S T E P 3 :726+627 = 1353 S T E P 4 STEP4 S T E P 4 :1353+3531 = 4884   在这里的一步是指进行了一次 N N N 进制的加法,上例最少用了4步得到回文数4884。   写一个程序,给定一个 N N N (2<= N N N <=10或 N N N =16)进制数 M M M (其中16进制数字为0-9与 A − F A-F A − F ),求最少经过几步可以得到回文数。   如果在30步以内(包含30步)不可能得到回文数,则输出“ I m p o s s i b l e ! Impossible! I m p o s s i b l e ! ” 输入格式   两行, N 与 M N与M N 与 M 输出格式   如果能在30步以内得到回文数,输出“ S T E P = x x STEP=xx S T

蓝桥杯算法训练回文数

人盡茶涼 提交于 2019-12-05 16:46:38
算法训练 回文数 时间限制: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 不管几进制,都化成十进制,然后先加到一块,再对进制数取余化简,就是进制加法和高精度加法的运用。 #include<bits/stdc++.h> using namespace std; typedef long long

【leetcode算法-简单】9. 回文数

依然范特西╮ 提交于 2019-12-05 16:46:32
【题目描述】 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 进阶: 你能不将整数转为字符串来解决这个问题吗? 来源:力扣(LeetCode) 链接:https://leetcode-cn.com/problems/palindrome-number 【 解答 】 解法一:将整数转化为字符串,判断字符串反转后是否与之前的相等    def isPalindrome(x)l: return str(x) == str(x)[::-1]   执行用时:60ms 解法二:计算出此整数的倒序整数n def isPalindrome(x): if x<0: return False num = x n = 0 while num: n = n*10 + num%10 num = num // 10 if n == x: return True else: return False   执行用时:101ms 判断一个整数是否是回文数。回文数是指正序(从左向右

判断回文数

妖精的绣舞 提交于 2019-12-05 15:03:59
“回文”是指正读反读都能读通的句子,回文数:1234321,145541。 1 public static boolean palindrome(int number) { 2 if(number<0 || (number%10==0 && number!=0)) { 3 return false; 4 } 5 int revertedNumber=0; 6 while(number>revertedNumber) { 7 revertedNumber = revertedNumber * 10 + number % 10; 8 number /= 10; 9 } 10 return number == revertedNumber || number == revertedNumber/10; 11 } 1.取它的个位数,舍去它的个位数 2.取到的个位数晋升到十位数,再次取它的个位数,与之相加。 3.实际上就是将它分为前半部分和后半部分,直到后半部分比前半部分大。 4.若前半部分和后半部分相等,或者前半部分和舍去个位数的后半部分相等,则是回文数。 来源: https://www.cnblogs.com/lumouren/p/11929647.html

LeetCode--009--回文数(python)

ⅰ亾dé卋堺 提交于 2019-12-04 20:31:56
判断一个数是否为回文数,回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 通常让数字逆序,然后判断和原数字是否相等,这里只需逆序一般就可以。 case1.奇数位例如判断12321 while循环到x=12 res = 123 x!>res 跳出循环 res //10 == x 为True case2.要判断的数位数为偶数位 :1221 x=12 res=12 x !.>res res == x True 1 class Solution: 2 def isPalindrome(self, x: int) -> bool: 3 if x < 0 or (x % 10 == 0 and x != 0): 4 return False 5 res = 0 6 while x>res: 7 res = res * 10 + x%10 8 x //=10 9 if res == x or res//10 ==x: 10 return True 11 return False 来源: https://www.cnblogs.com/NPC-assange/p/11881841.html

【力扣9】回文数

不打扰是莪最后的温柔 提交于 2019-12-03 23:42:55
判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 这一题比较像题7可以用整数翻转法, 全部反转 过来如果和原数一样那么就是一个回文数。 public bool IsPalindrome(int x) { if (x < 0) return false; else { int rev = 0; int x1 = x; while (x1 != 0) { int pop = x1 % 10; x1 = x1 / 10; rev = rev * 10 + pop; } return x == rev; } } 实际上如果是一个回文数, 只需要反转后一半,与前一半相等就可以, 例如“1221” 反转后一半21变成12 , 与前一半相等即可 问题是如何只反转一半 只要让 原数字 小于 反转数字 即可 public bool IsPalindrome(int x) { if (x < 0||(x%10 ==0&&x!=0)) return false; else {

LeetCode 9. 回文数

非 Y 不嫁゛ 提交于 2019-12-03 02:40:19
LeetCode 9. 回文数 判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。 示例 1: 输入: 121 输出: true 示例 2: 输入: -121 输出: false 解释: 从左向右读, 为 -121 。 从右向左读, 为 121- 。因此它不是一个回文数。 示例 3: 输入: 10 输出: false 解释: 从右向左读, 为 01 。因此它不是一个回文数。 知识点: strrev(); // 字符串逆序 PHP代码: function isPalindrome($x) { $x_ = strrev($x); return $x == $x_ ? true: false; } 来源: https://www.cnblogs.com/GetcharZp/p/11774345.html

#问题求解与编程# 实验四 F 小A回文数

匿名 (未验证) 提交于 2019-12-03 00:26:01
小A回文数 发布时间: 2018年4月9日 15:12 时间限制: 1000ms 内存限制: 128M 描述 最近小A在研究一个数学问题。 如果一个数n,它的二进制数和十进制数是回文数(例如1001,66,64446都是回文数),那么小A就把它命名为小A回文数。但是小A想知道,如果给定两个数n和m,它们之间有哪些数是小A回文数呢?(1<=n<=m<=10^6) 输入 输入包含多组,每组测试数据包含两个整数n,m,其中1<=n<=m<=1000000 输出 对于每一组测试数据,输出的结果之间用换行隔开。 样例输入1 1 5 样例输出1 1 3 5 样例输入2 5 10 样例输出2 5 7 9 ――――――――――――――――――――――――――――――――――――――――――――――――――― 小A回文数 解决关键在于进制问题 下面附上AC代码: #include <stdio.h> #include <iostream> using namespace std ; bool isPal ( int num , int radix ) { int temp = num ; int pal = 0 ; for (; num != 0 ;) { pal *= radix ; pal += num % radix ; num /= radix ; } return temp == pal

PAT乙级1079 延迟的回文数

匿名 (未验证) 提交于 2019-12-03 00:03:02
PAT乙级1079 延迟的回文数 题解:对给定的一个字符串,判断其与其逆序字符串相加是否得到回文数,输出每一步相加的结果,超过10步即停止判断,输出“Not found in 10 iterations.”,10步以内如果得到回文数,就输出“? is a palindromic number.”,(这里指出0和个位数本身就是回文数,无需判断输出即可) 核心:由于这个正整数不超过1000位,不能用普通的转换为integer 或者long类型了,因为这个数已经超过了long类型的数据范围,所以这里用字符串实现大整数相加,由于是相加的两个数位数相同,加起来还算是比较简单的,如果位数不同的话,这个考虑的情况就多了。(如果要实现不同位数的大整数相加,请看https://blog.csdn.net/CSDN_Lrcx/article/details/100143856,里面有详细说明,认真看的话肯定有收获) package lowlevel ; import java . io . BufferedReader ; import java . io . InputStreamReader ; /* 大整数相加 */ public class I079 { public static void main ( String [ ] args ) throws Exception {