当前位置: 代码迷 >> Java面试 >> JAVA面试6174有关问题
  详细解决方案

JAVA面试6174有关问题

热度:103   发布时间:2016-04-17 00:15:40.0
JAVA面试6174问题。

假设你有一个各位数字互不相同的四位数,把所有的数字从大到小排序后得到a,从小到大后得到b,然后用a-b替换原来这个数,并且继续操作。例如,从 1234出发,依次可以得到4321-1234=3087、8730-378=8352、8532-2358=6174,又回到了它自己!现在要你写一个 程序来判断一个四位数经过多少次这样的操作能出现循环,并且求出操作的次数

比如输入1234

输出是1234->3087->8352->6174->6174

?

package com.mkyong.common.util;import java.util.Arrays;public class TestMain {	/**	 * @param args	 */	public static void main(String[] args) {		int num = 1234;		int dif = 0;		StringBuilder sb = new StringBuilder();		while (true) {			dif = getDif(num);			if (num == dif) {				sb.append(num + "->" + num);				break;			} else {				sb.append(num + "->");				num = dif;			}		}		System.out.println(sb);	}	private static int getDif(int num) {		Integer[] numArray = new Integer[4];		numArray[0] = num % 10;		numArray[1] = num / 10 % 10;		numArray[2] = num / 100 % 10;		numArray[3] = num / 1000 % 10;		Arrays.sort(numArray);		int dif = (numArray[3] - numArray[0]) * 1000				+ (numArray[2] - numArray[1]) * 100				+ (numArray[1] - numArray[2]) * 10				+ (numArray[0] - numArray[3]);		return dif;	}}

?