码迷,mamicode.com
首页 > 其他好文 > 详细

数字黑洞 (20)

时间:2016-08-01 00:25:54      阅读:221      评论:0      收藏:0      [点我收藏+]

标签:

给定任一个各位数字不完全相同的4位正整数,如果我们先把4个数字按非递增排序,再按非递减排序,然后用第1个数字减第2个数字,将得到
一个新的数字。一直重复这样做,我们很快会停在有“数字黑洞”之称的6174,这个神奇的数字也叫Kaprekar常数。

例如,我们从6767开始,将得到

7766 - 6677 = 1089
9810 - 0189 = 9621
9621 - 1269 = 8352
8532 - 2358 = 6174
7641 - 1467 = 6174
... ...

现给定任意4位正整数,请编写程序演示到达黑洞的过程。 
输入描述:
输入给出一个(0, 10000)区间内的正整数N。


输出描述:
如果N的4位数字全相等,则在一行内输出“N - N = 0000”;否则将计算的每一步在一行内输出,直到6174作为差出现,输出格式见样例。注意每个数字按4位数格

式输出。

输入例子:
6767

输出例子:
7766 - 6677 = 1089

9810 - 0189 = 9621

9621 - 1269 = 8352

8532 - 2358 = 6174

import java.util.*;
import java.text.DecimalFormat;;
public class Main{
    public static void main(String[] args){
        Scanner in = new Scanner(System.in);
        int A;
        DecimalFormat format = new DecimalFormat("0000");
        while(in.hasNext()){
            A = in.nextInt();
            while(true){
                if(A == 6174){
                    break;
                }
                if(A==1111 || A==2222 ||A==3333 ||A==4444 ||A==5555 ||A==6666|| 
                        A==7777 ||A==8888 ||A==999 ){
                    System.out.println(A +" - "+A+" = 0000");
                    break;
                }
                int[] res = change(A);
                
                int x = res[1] - res[0];
                System.out.println(format.format(res[1]) + " - " +format.format(res[0]) +" = " +format.format(x) );
                
                A = x;
                if(x<=0)
                    break;
                
                
            }
        }
    }
    public static int[] change(int A){
        int[] nums = new int[10];
        int[] res = new int[2];
        while(A>=1){
            nums[A%10]++;
            A=A/10;
            
        }
        int sum = 0;
        for(int a:nums)
            sum+=a;
        int B = 0;
        int C = 0;
        for(int i=0;i<10;i++){
            int count1 = nums[i];
            while(count1!=0){
                B = B*10 + i;
                count1--;
            }
            int count2 = nums[10-i-1];
            while(count2!=0){
                C = C*10 + 10-i-1;
                count2--;
            }
        }
        while(C<1000){
            C = C * 10;
        }
        res[0] = B;
        res[1] = C;
        return res;
    }
}

 

 

数字黑洞 (20)

标签:

原文地址:http://www.cnblogs.com/theskulls/p/5724218.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!