java 输入正整数回文数算法_Java算法:回文数

一个正整数,如果交换高低位以后和原数相等,那么称这个数为回文数。比如 121121,23322332都是回文数,13,456713,4567 不是回文数。

任意一个正整数,如果其不是回文数,将该数交换高低位以后和原数相加得到一个新的数,如果新数不是回文数,重复这个变换,直到得到一个回文数为止。例如,57 变换后得到 132(57 + 75),132 得到 363(132 + 231),363363 是一个回文数。

曾经有数学家猜想:对于任意正整数,经过有限次上述变换以后,一定能得出一个回文数。至今这个猜想还没有被证明是对的。现在请你通过程序来验证。

输入格式

输入一行一个正整数 n。

输出格式

输出第一行一个正整数,表示得到一个回文数的最少变换次数。

接下来一行,输出变换过程,相邻的数之间用”—->”连接。输出格式可以参见样例。

保证最后生成的数在 int 范围内。

样例输入

349

样例输出

3

349—->1292—->4213—->7337

分析:(虽然没什么好分析的),题目要求是将一个数进行判断是否为回文数,若不是回文数,则经过一系列转变,变成回文数并输出转变过程。

对其过程进行分析,其大概是需要如下步骤:

1.判断该数是否回文

2.将该数的对称位置进行交换,得到新数

3.将新数与之前的数相加,判断此数是否回文,并重复操作直到回文。

到这里,我们能知道,我们需要两个int型变量来保存数值,也就是如下代码中的value和v,另外的value1 保存二者之和。

因为要设计对数字的拆分和比较,所以考虑将数字转换为int 型数组,便于比较,封装了一个方法 Number2Array(int number):寓意number to array。

当然还会涉及到将int型数组转换为int型数据,因此封装了另一个方法Array2Number(int[] arr):寓意array to number。

此外,该程序还会涉及数组元素的交换,因此封装另外的一个方法swap(int arr[],int index),作用是将index指定对称的arr中元素交换。

最后,还有一个问题,就是答案的输出,观察,第二行我们可以考虑采用字符串的形式进行输出,参考代码中的strAnswer;第一行,一个int型变量即可,参考答案中的times。

本程序,还有一部分写的比较粗糙,就是while循环中有一个flags,循环外有个flag,都是用来判断循环是否继续的约束,其原理是:只要满足该数字对称(回文),则结束循环,否则继续。

整体代码如下:

import java.util.Scanner;

public class HuiWenNumber

{

public static void main(String[] args)

{

Scanner sc=new Scanner(System.in);

String strValue=sc.nextLine();

int value=Integer.parseInt(strValue);

int values[]=Number2Array(value);

int times=0;

String strAnswer=Integer.toString(value);

boolean flag=values[0]!=values[values.length-1]?true:false;

while(flag)

{

times++;

strAnswer+="--->";

int v=Array2Number(values);

for(int i=0;i

运行结果如图所示:

c3737b3a1b99bde4c319e4dec535b25b.png

测评结果:

40ded49052f4cf87f4f588cf212610fa.png

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值