【数据结构与算法】数学——回文数

回文数

LeetCode:回文数

题目描述:

判断一个整数是否是回文数。回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数。

示例:

输入: 121
输出: true

思想:

  • x%10得到尾数,x/d(d为10的x的位数次方)得到首位数字,比较二者是否相同;
  • 注意:循环条件必须是x>0而不是x>10。当x为个位数时,如果是中心位置必然是true,但如果是1000021这种情况(不是回文数),x最后为2,此时x%10跟x/d不相等需要再判断一轮。

代码:

class Solution {
public:
    bool isPalindrome(int x) {
        if(x<0){
            return false;
        }
        int d = 1,m,n;
        while(x/d>=10) d*=10;
        while(x>0){
            m = x%10;
            n = x/d;
            if(m == n){
                x=(x-m*d)/10;
                d=d/100;
            }else{
                return false;
            }
        }
        return true;
    }
};

原文地址:https://www.cnblogs.com/buptleida/p/12624843.html

时间: 2024-10-09 09:51:57

【数据结构与算法】数学——回文数的相关文章

C++基础算法之 回文数

// 常见算法.cpp : 定义控制台应用程序的入口点. //回文 #include "stdafx.h" #include <iostream> using namespace std; void reverse_num(int& n) { int rem = 0;//用于表示余数 int reverse = 0;//反转后的数字 int temp = 0; temp = n; while (temp !=0) { rem = temp%10; reverse =

算法训练 回文数

问题描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个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=1

PHP算法之回文数

判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 示例 1: 输入: 121输出: true示例 2: 输入: -121输出: false解释: 从左向右读, 为 -121 . 从右向左读, 为 121- .因此它不是一个回文数.示例 3: 输入: 10输出: false解释: 从右向左读, 为 01 .因此它不是一个回文数.进阶: 你能不将整数转为字符串来解决这个问题吗? 来源:力扣(LeetCode) 1.这个转为字符串处理 class Solutio

算法之回文数判断

所谓回文字符 串就是指正读反读均相同的字符序列,如“席主席”.“记书记”.“aha”和“ahaha”均是回 文,但“ahah”不是回文. 通过栈这个数据结构我们将很容易判断一个字符串是否为回文. 1 // 4. 判断回文字符串 2 char a[9], s[9]; 3 int i, len, mid, next, top; 4 5 gets(a); // 读入一行字符串 6 // a = "qwerewq"; 7 len = strlen(a); 8 mid = len / 2 - 1

LeetCode_09 回文数【数学】

题目描述 判断一个整数是否是回文数.回文数是指正序(从左向右)和倒序(从右向左)读都是一样的整数. 进阶: 你能不将整数转为字符串来解决这个问题吗? 示例 输入: 121 输出: true 输入: -121 输出: false 解释: 从左向右读, 为 -121 . 从右向左读, 为 121- .因此它不是一个回文数. 输入: 10 输出: false 解释: 从右向左读, 为 01 .因此它不是一个回文数. 知识点 回文数 数字反转(数学解法) 整数转化为字符串 整数&字符串转化 string

C语言之回文数算法

"回文"是指正读反读都能读通的句子.它是古今中外都有的一种修辞方式和文字游戏,如"我为人人,人人为我"等.在数学中也有这样一类数字有这种特征,成为回文数(palindrome number). 设n是一随意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.比如,若n=1234321,则称n为一回文数.但若n=1234567,则n不是回文数. 上代码: #include <stdio.h> #define true 1 #defin

【LeetCode-面试算法经典-Java实现】【009-Palindrome Number(回文数)】

[009-Palindrome Number(回文数)] [LeetCode-面试算法经典-Java实现][所有题目目录索引] 原题 Determine whether an integer is a palindrome. Do this without extra space. 题目大意 判断一个数字是否是回访字数,不要使用额外的空间. 解题思路 为了不使用额外的空间,参考了其它的解决,那些解法看起来在isPalindrome方法中没有使用额外参数,但是却使用了方法调用,这个比一个整数消耗的

空间复杂度为O(1)的回文数判定算法

空间复杂度为O(1)的回文数判定算法 一.题设 实现空间复杂度为O(1)的回文数判定,输入为整型常数,要求输出判断是否为回文数. 要求格式如下: public boolean isPalindrome(int x) { //Your judge code } 二.概念 回文数(Palindrome)的定义:设n是一任意自然数.若将n的各位数字反向排列所得自然数n1与n相等,则称n为一回文数.例如,若n=1234321,则称n为一回文数:但若n=1234567,则n不是回文数. 特点: 1.负数.

回文数系列题目(经典算法)

回文数 时间限制:1000 ms  |  内存限制:65535 KB 难度:0 描述 请寻找并输出1至1000000之间的数m,它满足m.m^2和m^3均为回文数.回文数大家都知道吧,就是各位数字左右对称的整数,例如121.676.123321等.满足上述条件的数如m=11,m^2=121,m^3=1331皆为回文数. 输入 没有输入 输出 输出1至1000000之间满足要求的全部回文数,每两个数之间用空格隔开,每行输出五个数 解析:这道题直接模拟就好了,算是回文数中最简单的题了,直接写个判断回