回文日 | 绕不开的回文数

回文数?

“回文”是指正读反读都能读通的句子,它是古今中外都有的一种修辞方式和文字游戏,如“我为人人,人人为我”等。在数学中也有这样一类数字有这样的特征,成为回文数(palindrome number)。

回文数在数学领域备受关注。一个典型的问题就是,寻找那些具有某种特性,并且符合回文特征的数。例如:

  • 回文素数:2, 3, 5, 7, 11, 101, 131, 151,…
  • 回文完全平方数:0, 1, 4, 9, 121, 484, 676, 10201, 12321,…

一个猜想:任何一个自然数与它的倒序数相加,所得的和再与和的倒序数相加,……如此反复进行下去,经过有限次步骤后,最后必定能得到一个回文数(196除外)。因为196这个数,按照上述变换规则重复了数十万次,仍未得到回文数。但是人们既不能肯定运算下去永远得不到回文数,也不知道需要再运算多少步才能最终得到回文数。

如何判断一个数是否为回文数?

  • 将这串数字逆序,然后判断逆序后的数字是否和正序后的数字完全一样,如果完全一样,就是回文。
  • 进行逐位判断。首先该整数的首位数字和末尾数字进行比较,判断是否相等,若不等,则不是回文数;若相等,则删除左右两位数,然后再判断首尾,如此循环直至得出结论。
/*
*进行逐位判断。首先该整数的首位数字和末尾数字进行比较,判断是否相等,若不等,则不是回文数;
* 若相等,则删除左右两位数,再取首位数字和未尾数字进行比较,只等比较结束为止。若相等,则是回文数;反之  则不是。
*/
    public static boolean palindrome(int num){
		if(num < 0){
 			System.out.println(num + " is not Palindrome Number !"); 
			return false;
		}
		int lenth = 1;
		while(num / lenth >= 10){ 		//判断位数
		lenth *= 10;
		}
		while(num > 0){
			int right = num % 10; 		//取数的尾数
			int left = num / lenth;		//取数的首位
			if(left != right){
				System.out.println(num + " is not Palindrome Number !");
				return false;
			}
			num = num % lenth / 10;		//除掉首尾两位数字,剩余中间的
			lenth = lenth / 100;  		//相应长度也减少2位
 		}
		System.out.println(num + " is Palindrome Number !");
		return true;
	}

  • 将数值转换成字符串判断
public static boolean palindrome(int num){
		if(num < 0){
 			System.out.println(num + " is not Palindrome Number !"); 
			return false;
		}
		String a=String.valueOf(num);
    		for(int i=0;i<a.length()/2;i++) {
			if(a.charAt(i)!=a.charAt(a.length()-i-1)) {
				System.out.println(num + " is not Palindrome Number !");
				}else {
				System.out.println(num + " is Palindrome Number !");
				}
		}
	}
  • 利用堆栈来判断
# JAVA 

标题:回文日 | 绕不开的回文数
作者:amore
地址:HTTPS://iamwaiting.cn/articles/2020/02/02/1580655282159.html
彧言:  正在加载今日诗词....

评论

取消