分享一个大牛的人工智能教程。零基础!通俗易懂!风趣幽默!希望你也加入到人工智能的队伍中来!请轻击人工智能教程
package live.every.day.ProgrammingDesign.CodingInterviewGuide.Other;/*** 判断一个数是否是回文数** 【题目】* 定义回文数的概念如下:* •如果一个非负数左右完全对应,则该数是回文数,例如:121,22等。* •如果一个负数的绝对值左右完全对应,也是回文数,例如:-121,-22等。* 给定一个32位整数num,判断num是否是回文数。** 【难度】* 简单** 【解答】* 本题的实现方法当然有很多种,本文介绍一种仅用一个整型变量就可以实现的方法,步骤如下:* 1.假设判断的数字为非负数n,先生成变量help,开始时help=1。* 2.用help不停地乘以10,直到变得与num的位数一样。例如:num等于123321时,help就是100000。num如果是131,help就是* 100,总之,让help与num的位数一样。* 3.那么num/help的结果就是最高位的数字,num%10就是最低位的数字,比较这两个数字,不相同则直接返回false。相同则令* num=(num%help)/10,即num变成除去最高位和最低位两个数字之后的值。令help/=100,即让help变得继续和新的num位数一样。* 4.如果num==0,表示所有的数字都已经对应判断完,返回true,否则重复步骤3。* 上述方法就是让num每次剥掉最左和最右两个数,然后逐渐完成所有对应的判断。需要注意的是,如上方法只适用于非负数的判断,如* 果n为负数,则先把n变成其绝对值,然后用上面的方法进行判断。同时还需注意,32位整数中的最小值为-2147483648,它是转不成* 相应的绝对值的,可这个数也很明显不是回文数。所以,如果n为-2147483648,直接返回false。具体过程请参看如下代码中的* isPalindromeNumber方法。** @author Created by LiveEveryDay*/public class IsPalindromeNumber {public static boolean isPalindromeNumber(int n) {if (n == Integer.MIN_VALUE) {return false;}n = Math.abs(n);int help = 1;while (n / help >= 10) {help *= 10;}while (n != 0) {if (n / help != n % 10) {return false;}n = (n % help) / 10;help /= 100;}return true;}public static void main(String[] args) {int n = 123454321;System.out.printf("Is palindrome number: %s", isPalindromeNumber(n));}}// ------ Output ------
/*
Is palindrome number: true
*/
本文发布于:2024-01-29 05:04:35,感谢您对本站的认可!
本文链接:https://www.4u4v.net/it/170647587812889.html
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系,我们将在24小时内删除。
留言与评论(共有 0 条评论) |