计蒜客——练习题回文数(java)

题目

一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如121,2332都是回文数,13,4567不是回文数。
任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数不是回文数,重复这个变换,直到得到一个回文数为止。例如,57变换后得到132(57+
75),132得到363(132+231),363是一个回文数。
曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定能得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。

样例输入

349

样例输出

3
349—>1292—>4213—>7337

实现代码:(java)

import java.util.Scanner;

public class Main {
	static boolean hw(char[] s2)  //判断方法是否回文数
	{
		boolean flag=false;
		for(int i=0, j=s2.length-1;i<s2.length/2&&i<j;i++,j--)
		{if(s2[i]!=s2[j])
		{
			flag=true;//True 表示不是回文数
			return flag;
		}
		}

		return flag;
	}

	static int fz(int n)  //求一个数的反数(例如 345的为543)
	{int m=0;
	while(n!=0)
	{
		m=m*10+n%10;
		n/=10;
	}
	return m;
	}


	public static void main(String[] args)
	{ 

		Scanner c=new Scanner(System.in);
		int n=c.nextInt();
		int n1=n;int n2=n;int n3=n;
		//
		String s ="";
		while(n1!=0)    //n1存入string的s中,但存入的s为数字n1的反转(即345存入s为string类的“543”),
		//下边有解决方法
		{
			s+=n1%10;
			n1/=10;
		}
		//解决字符串反转问题,顺便转为字符数组中(因为 boolean hw(char[] s2) 需要数组类型形参 )
		StringBuilder sb = new StringBuilder(s);//想要反转字符串,借用StringBuilder的reverse()。
		String s2=sb.reverse().toString();
		char[] c1=new char[sb.length()];
		s2.getChars(0, sb.length(),c1 , 0);//将数字"n1"存入s(反),然后将s转为StringBuilder sb,
											//sb反转(reverse),转入char数组"c1"(getChars())
		//
		
		
		int [] a=new int[15];int k=0;
		boolean flag=hw(c1);
		while(flag==true)//判断是否继续需要加上自己的反数(345的反数543)
		{
			n2+=fz(n2);
			//System.out.println("进入");
			a[k]=n2;k++;
			n1=n2;
			/重复上边步骤,将数存入字符数组
			s ="";
			while(n1!=0)
			{
				s+=n1%10;
				n1/=10;
			}	
			StringBuilder sb2 = new StringBuilder(s);
			
			String s21=sb2.reverse().toString();
			char[] c11=new char[sb2.length()];
			sb2.getChars(0, sb2.length(),c11 , 0);//存入字符数组   c11
			//
			flag=hw(c11);
		
		}
		System.out.println(k);
		System.out.print(n3);
		for(int p=1;p<=k;p++)
		{
		//	System.out.print("("+p+")"+k+")");
			System.out.print("--->"+a[p-1]);
		}
	}
}

运行结果

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值