`

java-判断一个整数是否回文,考虑溢出

 
阅读更多

public class PalindromeInt {

	/**
	 * PalindromeInt,like 1,121,12321....
	 * you should consider the possibility that the reversed number might overflow
	 * eg. 1...................9,after reversing,9 comes to first,and...you know that.
	 * 
	 */
	public static void main(String[] args) {
		int[] a={12321,17770};
		PalindromeInt pi=new PalindromeInt();
		boolean re=pi.isPalindromeInt2(a[0]);
		System.out.println(re);
		re=pi.isPalindromeInt2(a[1]);
		System.out.println(re);
	}

	//generic solution 
	public boolean isPalindromeInt(int x){
		if(x<0)return false;
		int x2=x;
		int y=0;
		while(x>0){
			y*=10;
			y+=x%10;
			x/=10;
		}
		return x2==y;
	}
	
	//better solution
	//avoid overflow
	public boolean isPalindromeInt2(int x){
		if(x<0)return false;
		boolean re=true;
		int div=1;
		while(x/div>=10){
			div*=10;
		}
		while(x>0){
			int h=x/div;//head
			int t=x%10;//tail
			if(h!=t){
				re=false;
				break;
			}
			x=(x%div)/10;//now x is 232 instead of 12321
			div/=100;//accordingly,div should be 100 instead of 10000
		}
		return re;
	}
	
	/* c/c++? I don't know how it works
	 * invoke like that: isPalindrome(x, x)
	boolean isPalindrome(int x,int &y){
		if (x < 0) return false;
		  if (x == 0) return true;
		  if (isPalindrome(x/10, y) && (x%10 == y%10)) {
		    y /= 10;
		    return true;
		  } else {
		    return false;
		  }
	}
	*/
	
}


分享到:
评论
2 楼 bylijinnan 2012-08-22  
在isPalindromeInt2这个方法里面,x是不断减小的。例如12321,先判断头和尾的数字是否相等:1=1,那么x就变为232,x不断减少,避免溢出。

但isPalindromeInt这个方法,是计算反转后的数字与原数是否相等来判断是否回文。
考虑x=2147483647,一反转变成7463847412就超过了Integer.MAX_VALUE
1 楼 neyshule 2012-08-22  
这是怎么处理overflow的啊?

相关推荐

    java实现的回文数

    在上述代码中,我们定义了一个名为isPalindrome的方法,通过比较字符串的首尾字符判断是否为回文数。注意,对于负数,我们需要先处理负号,因为负号并不影响数字的回文性质。此外,如果数字非常大,可能需要处理溢出...

    leetcodepalindrom-LeetCode---Palindrom-Number:LeetCode---回文数

    在编程挑战平台LeetCode上,有一道经典的题目就是判断一个整数是否为回文数。这个问题对于初学者来说是一个很好的练习,因为它涉及到基本的字符串处理和数字转换。 解决这个问题的方法有多种,但大多数都是通过将...

    蓝点被必做的算法经典题java.c/c++

    - **目标**: 实现二分查找算法,判断一个整数是否存在于给定的整数数组中。 - **程序分析**: - 二分查找要求数组事先排序。 - 从数组的中间元素开始比较,缩小搜索范围。 - 如果中间元素大于目标值,则在左半部分...

    回文数的判断问题 已编译通过

    回文数的判断问题是编程初学者经常会遇到的一个经典题目,它的核心在于如何编写代码来检查一个给定的数字是否为回文。 在编程中,解决回文数判断问题有多种方法,下面将详细介绍几种常见的算法: 1. 字符串反转法...

    java判断回文数.docx

    判断一个数是否为回文数的方法多种多样,这里我们将重点讨论文档中提到的通过字符串操作实现的策略。 在给出的代码示例中,`isPalindrome` 方法接收一个整数 `number` 作为输入,其主要步骤如下: 1. **转换为字符...

    Java实验二.doc

    另一个实验要求是编写一个Java程序,判断用户输入的一个1至99999之间的数是否为回文数。 **知识点详解:** - **程序设计:** - 使用`JOptionPane.showInputDialog()`获取用户输入。 - 将输入字符串转换为整数,...

    领扣刷题简单10道

    2. **回文数**:判断一个整数是否是回文,即正读反读都一样。可以通过将数字转化为字符串,然后比较前半部分和后半部分是否相等来解决。 3. **删除排序数组中的重复项**:给定一个有序数组,删除重复的元素,使得每...

    基于JavaSpring Boot框架的算法与数据结构项目.zip

    本项目是一个基于Java和Spring Boot框架的算法与数据结构项目,涵盖了多种常见的算法问题和数据结构操作。项目旨在通过实际代码实现,帮助开发者理解和掌握算法与数据结构的核心概念。 项目的主要特性和功能 ...

    java实验二java实验二.doc

    - 该实验要求编写一个Java程序,判断用户输入的1-9999之间的数是否为回文数。回文数的特性是正读和反读都一样。 - 首先,程序使用`JOptionPane.showInputDialog`获取用户输入,然后通过`Integer.parseInt`将输入的...

    LeetCode前400题Java精美版

    9. **Palindrome Number** (Easy): 判断一个整数是否是回文数。可以将数字转换为字符串后进行比较,也可以通过数学方法进行判断。 10. **Regular Expression Matching** (Hard): 实现正则表达式的匹配功能,涉及...

    java基础编程题

    - **质因数分解**:将一个正整数写成几个质数相乘的形式。 - **循环结构**:使用循环逐步分解。 **描述:**编写程序将任意整数n分解成质因数的形式,如90=2×3×3×5。 - 实现思路: 1. 从最小的质数2开始尝试分解...

    LeetCode 刷题笔记 with Java.zip

    《LeetCode刷题笔记withJava》是一份专为Java开发者准备的算法实战指南,涵盖了LeetCode网站上前一百道编程挑战题目。这份资料旨在帮助程序员提升算法能力,掌握数据结构和问题解决技巧,对于准备面试或者想要提升...

    「小算法」回文数与数值合法性检验.pdf

    在编程中,判断一个整数是否为回文数是一个常见的算法问题。 对于回文数的判断,通常有两种方法: 1. 字符串比较法:将数字转换为字符串,然后检查字符串是否是回文。但这种方法需要额外的空间存储字符串,可能不...

    蓝桥杯试题答案

    13. **闰年判断**:判断一个年份是否为闰年,根据规定,闰年能被4整除但不能被100整除,或者能被400整除。 14. **阶乘计算**:计算一个正整数的阶乘,通常使用循环或递归方法。 15. **高精度加法**:处理大整数的...

    leetcode算法题主函数如何写-algorithm:关注算法,题目来源于LeetCode。使用Java8来实现,涵盖:数组、链表、栈、堆、

    leetcode算法题主函数如何写 关注算法,提升Coding 关注算法,题目来源于...在这样做的时候,我们可以预先检查向原整数附加另一位数字是否会导致溢出。 8. 请你来实现一个 atoi 函数,使其能将字符串转换成整数。

    PalindromValue

    2. **条件判断**:编写一个函数或逻辑来检查一个数字是否为回文,可以使用字符串转换或双指针方法。 3. **数据结构**:可能需要使用数组或列表来存储数字对和它们的乘积,以便进行比较。 4. **效率优化**:由于...

    Leetcode-Solution:Leetcode

    1. 位运算:在LeetCode中,位运算常用于高效解决问题,如判断一个数是否为2的幂、找到数组中最大的32位有符号整数等。 七、滑动窗口 1. 滑动窗口:在处理数组或字符串的问题时,滑动窗口可以用来找出满足特定条件...

    SPOJ极少量的源程序。

    这需要掌握递归或循环计算大整数阶乘的方法,以及可能的溢出问题。 3. **PRIME1**:题目很可能与素数有关。需要了解素数的定义,可能需要实现快速检测素数的算法,如埃拉托斯特尼筛法或米勒-拉宾素性测试。 4. **...

    CSES:我的CSES解决方案

    CSES(Consumer Electronics Service Exercises)是一个知名的在线编程练习平台,由芬兰赫尔辛基大学的Henri Hakamaa创建,旨在帮助程序员提升算法和数据结构技能。这个平台提供了众多精心设计的问题,涵盖了从基础...

Global site tag (gtag.js) - Google Analytics