判断整形回文数

题意:

判断一个整数是否为回文数:

1、负数不是回文数

2、个位数一定是回文数

3、12321、6666、11等类似这样的数是回文数

下面是我写的代码:

 public boolean isPalindrome(int x) {
        if(x < 0){
            return false;
        }else if(x<10){
            return true;
        }
        int a=10,b=10;
        while(x/a > 9) a *= 10;
        if(x/a != x%b){
            return false;
        }else{
            a = a/10;
            b = b*10;
            while(a >= b){
                int temp1 = (x%(a*10))/a;
                int temp2 = (x/(b/10))%10;
                if(temp1 != temp2)
                    return false;
                a = a/10;
                b = b*10;
            }
        }
        return true;
    }

思路:

1 首先判断是否是正数

2 判断是否是个位数

3 根据算数特性,逐个提出对应位比较是否相等,一旦有不想等马上返回false,如果执行完成还没有不同,就在结尾返回true。

leetcode讨论区方法:

public boolean isPalindrome(int x) {
    if (x<0 || (x!=0 && x%10==0)) return false;
    int rev = 0;
    while (x>rev){
    	rev = rev*10 + x%10;
    	x = x/10;
    }
    return (x==rev || x==rev/10);
}

此方法利用回文数的特性:

1 设置一个数为rev=0

2 判断输入数字x是否大于rev,如果大于则进入循环,否则跳出到第4步

3 令rev = rev*10 + x%10 且 x=x/10 , 进入下一个循环

4 如果x是回文数,那么此时的x=rev或者x=rev/10

时间: 2024-10-11 21:23:50

判断整形回文数的相关文章

算法:判断是否回文数

题目:判断传入数字是否为回文数. 回文数是指一个像16461这样“对称”的数,即:将这个数的数字按相反的顺序重新排列后,所得到的数和原来的数一样. 解法: 1 public boolean isPalindromic(int number){ 2 if(number<10){ 3 return true; 4 } 5 ArrayList<Integer> arry = new ArrayList<Integer>(); 6 do{ 7 arry.add(number%10);

判断一个数字是否为回文数

Determine whether an integer is a palindrome. Do this without extra space.(source) 判断一个数字是否为回文数,并且不使用额外的存储空间. "回文"是指正读反读都能读通的句子,那么回文数,就很容易理解,就是指一个数正反读的值是相同的.还有一个要求是不要使用额外的存储空间. Hints: 要将一个数的最高位与最低位比较,取出一个数的最低位容易(x%10),但要得到高位却很难. Solution 1: 首先得知

ACM之判断回文数

题目如下 这道题比较简单,先上Python代码感受一下,就一行搞定: #判断回文数 def isPalindrom(x):     return  str(x) == str(x)[::-1] 这种方法虽然简单,但是耗时比较长.再用Java解决一下看看 方法一 显然负数不可能是回文数,区间[0,9]的整数肯定是回文数,所以把这些确定的条件先进行判断 将整数的每一位放在链表中,然后将链表逆序,比较逆序链表与顺序链表元素是否一样,一样则是回文数,否则不是 代码如下: public class Pal

回文数的判断与生成

判断是不是回文数 12321 1221 public static void PJ() { Scanner sc = new Scanner(System.in); System.out.println("请输入一个整数:"); int num = sc.nextInt(); String s = num+""; String s1 =""; for (int i = s.length()-1; i>=0; i--) { s1+=s.cha

判断是否为回文数

//判断是否为回文数:若n=1234321,则称n为一回文数 let readline = require("readline-sync"); let newNum = 0; console.log("请输入您要判断的回文数"); let oldNum = parseInt(readline.question("")); //首先将oldNum赋值给临时变量temp,以内临时变量一直都是要变化的 //关键在于取出每一位 temp = temp/1

Vijos 回文数

描述 若一个数(首位不为零)从左向右读与从右向左读都一样,我们就将其称之为回文数. 例如:给定一个10进制数56,将56加65(即把56从右向左读),得到121是一个回文数. 又如:对于10进制数87:STEP1:87+78 = 165 STEP2:165+561 = 726STEP3:726+627 = 1353 STEP4:1353+3531 = 4884在这里的一步是指进行了一次N进制的加法,上例最少用了4步得到回文数4884. 写一个程序,给定一个N(2<=N<=10或N=16)进制数

回文数问题

问题描述 我在2008年6月写了一篇随笔"可以使用C#语言的在线ACM题库",其中提到 Sphere Onlile Judge (SPOJ) 网站.现在我们来看看该网站 SPOJ Problem Set (classical) 中的"5. The Next Palindrome".这道题目的主要内容如下所示: The Next Palindrome: A positive integer is called a palindrome if its represent

yzoi1109&amp;&amp;viojs1042最小步数的一点看法——回文数

Description - 问题描述 有一天,雄霸传授本人风神腿法第一式:捕风捉影..............的步法(弟子一:堂主,你大喘气呀.风:你给我闭嘴.)捕风捉影的关键是换气(换不好就会大喘气...). 使用捕风捉影这一招时并不是每一步都喘气,而是在特定的步数喘气.一般来说功力越高,喘气越稀疏.喘气的步数符合特定规律:第一要是SUSHU(弟子二:哇塞!堂主,你还会鸟语,我好好崇拜你呦!可是SUSHU是什么意思呢?风:笨蛋,那是汉语拼音!)第二要是一个回文数,回文数就是正反念一样的数,如:

n范围内的回文数

上课的时候浏览别人的博客发现这个问题的,以前也看到过,但是就是没有动手调试.今天贴上的代码,并且分析分析. 先上代码 #include "stdafx.h" #include "iostream.h" #include "math.h" bool is_huiwenshu(int x); int main(int argc, char* argv[]){ cout<<"输入一个数n,求该数内的回文数"<<