蓝桥杯(java)个人赛真题:生成回文数

生成回文数

		所谓回文数就是左右对称的数字,比如:
			585,5885,123321...
			当然,单个的数字也可以算作是对称的。
			
			小明发现了一种生成回文数的方法:
			比如,取数字19,把它与自己的翻转数相加:
			19 + 91 = 110,如果不是回文数,就再进行这个过程:
			110 + 011 = 121 这次是回文数了。
			
			200以内的数字中,绝大多数都可以在30步以内变成回文数,只有一个数字很特殊,就算迭代了1000次,它还是顽固地拒绝回文!
			
			请你提交该顽固数字,不要填写任何多余的内容。

思路:
思路很简单,按题意来,遍历1~200的数字,递归进行翻转验证是否为回文数,记录递归次数,若小于30次成回文则退出递归,直到递归次数大于30次,则打印;

package Lqb;

import java.math.BigInteger;
public class Text45 {
	static int p;
	public static void main(String[] args) {
			for(p=0;p<200;p++){
				//System.out.println("初始数: "+p);
				dg(BigInteger.valueOf(p),0);
			}
	}
	public static void dg(BigInteger i,int j){
		String x="";		//头
		String y="";		//尾
		String m=String.valueOf(i);		//保存和(字符串)
		for(int n=m.length()/2-1;n>=0;n--){	//判断是否是回文数
			x+=m.charAt(n)+"";
		}
		int len=m.length()/2+(m.length()%2==0?0:1);	//
		y=m.substring(len);
		if(x.equals(y)){		//判断为回文数
			//System.out.println("  最终数: "+i+"  次数:"+j);
			return;
		}
		if(j>30){			//判断重复过程>30
			System.out.println("初始数: "+p+"  最终数: "+i+"  次数:"+j);
			return;
		}
		BigInteger k=i;		//保存原数字
		String str="";	//保存翻转数字
		for(int f=String.valueOf(i).length()-1;f>=0;f--){	//翻转数字
			str+=String.valueOf(i).charAt(f);
		}
		BigInteger sum= new BigInteger(str).add(k);	//保存和(原数字+翻转数字)
		dg(sum,++j);
	}
}

猜你喜欢

转载自blog.csdn.net/qq_42798905/article/details/88413399
今日推荐