Java 数字回文数

版权声明:最终解释权归属Hern所有,恒! https://blog.csdn.net/qq_36761831/article/details/82730647

小于0的整数不符合要求。

若一个数不是回文数,相加12轮产生一个回文数。

package com.Hern;
import java.util.*;
import java.math.*;

public class Test {
	
    private static final int MAX_N = 19;//限定数组的长度
    
    public static void main(String[] args) {
    	Scanner cin = new Scanner(System.in);
    	int num = cin.nextInt();
    	int temp = findPalindrome(num);
    	if(temp == -1) {
    		System.out.println("负数");
    	}
    	
    	if(temp == num) {
    		System.out.println("是回文数!");
    	}else {
    		System.out.println("该数不是回文!");
    		System.out.println("该数不断相加产生的第一个回文数是:"+temp);
    	}
    }
    
    public static int findPalindrome(int num) {
    	if(num < 0) {//输入的数小于0
    		return -1;
    	}
    	
    	if(isPalindrome(num)) {//输入的数是回文数
    		return num;
    	}
    	
    	return findPalindrome(num + reverseNumber(num));//输入的数不是回文数,并输出该数不断相加产生的下一个回文数
    	
    }
    
    //判断是否为回文数
    public static boolean isPalindrome(int num) {
    	
    	int flag = 0;
    	int[] n = new int[MAX_N];
    	
    	if(num >= 0 && num <= 9) {//对于任意一个0~9的整数都是回文
    		return true;
    	}
    	
    	while(num > 0) {
    		n[flag++] = num%10;
    		num /= 10;
    	}
    	
    	for(int i = 0; i < flag/2; i++) {
    		if(n[i] != n[flag - i -1]) {
    			return false;
    		}
    	}
    	return true;
    	
    }
    
    //数本身不断递增计算
    public static int reverseNumber(int num) {
    	
    	int ret = 0;
    	
    	int flag = 0;
    	int[] n = new int[MAX_N];
    	
    	while(num > 0) {
    		n[flag++] = num%10;
    		num /= 10;
    	}
    	
    	for(int i = 0; i < flag; i++) {
    		ret *= 10;
    		ret += n[i];
    	}
    	
    	return ret;
    }
}  

猜你喜欢

转载自blog.csdn.net/qq_36761831/article/details/82730647
今日推荐