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

数字黑洞 - 6174

时间:2015-02-28 17:58:43      阅读:131      评论:0      收藏:0      [点我收藏+]

标签:

  1 package com.niit.niitdigitalblackhole6174.main;
  2 
  3 /**
  4  * 验证数学黑洞 用户输入一个四位数,输入变换到6174的过程 
  5  * 例如:1234 
  6  * 4321 - 1234 = 3087 
  7  * 8730 - 0378 = 8352
  8  * 8532 - 2358 = 6174
  9  * @author Fatoland
 10  */
 11 public class DigitalBlackHole6174 {
 12 
 13     
 14     public static int getResult(int number) {
 15         int result = getSortedNumber(number) - getReversedNumber(getSortedNumber(number));
 16         return result;
 17     }
 18     
 19     public static int getSortedNumber(int number) {
 20         int digitsTester = getDigitsTester(number);
 21         
 22         // 计算出1000是10的3次方
 23         int exponent = (int) Math.log10(digitsTester);
 24         
 25         int[] tempArray = new int[4];
 26         for (int i = 0; i <= exponent; i++) {
 27             // tempArray[i] = 1234 / 1000 = 1
 28             tempArray[i] = number / digitsTester;
 29             // number = 1234 - 1234 / 1000 (=1) * 100 = 234
 30             number = number - number / digitsTester * digitsTester;
 31             // digitsTester = 1000 / 10 = 100
 32             digitsTester = digitsTester / 10;
 33         }
 34         
 35         int[] sortedArray = getSortedArray(tempArray);
 36         int temp1 = sortedArray[3];
 37         int temp2 = sortedArray[2];
 38         int temp3 = sortedArray[1];
 39         int temp4 = sortedArray[0];
 40         
 41 //        int sortedNumber = 0;
 42         int digitsTester2 = getDigitsTester(number);
 43 //        for (int i = sortedArray.length - 1; i > 0; i--) {
 44 //            sortedNumber = sortedArray[i] * digitsTester2;
 45 //            digitsTester2 /= 10;
 46 //        }
 47         int sortedNumber = temp1 * 1000 + temp2 * 100 + temp3 * 10 + temp4 * 1;
 48         return sortedNumber;
 49     }
 50     
 51     public static int[] getSortedArray(int[] tempArrayForSort) {
 52         for (int i = 0; i < tempArrayForSort.length - 1; i++) {
 53             int currentMin = tempArrayForSort[i];
 54             int currentMinIndex = i;
 55             
 56             for (int j = i + 1; j < tempArrayForSort.length; j++) {
 57                 if (currentMin > tempArrayForSort[j]) {
 58                     currentMin = tempArrayForSort[j];
 59                     currentMinIndex = j;
 60                 }
 61             }
 62             
 63             if (currentMinIndex != i) {
 64                 tempArrayForSort[currentMinIndex] = tempArrayForSort[i];
 65                 tempArrayForSort[i] = currentMin;
 66             }
 67         }
 68         return tempArrayForSort;
 69     }
 70 
 71     public static int getReversedNumber(int sortedNumber) {
 72         int reversedNumber = 0;
 73         int tempForReverse = 0;
 74         int digitsTester = getDigitsTester(sortedNumber);
 75 
 76         // 计算出1000是10的3次方
 77         int exponent = (int) Math.log10(digitsTester);
 78         for (int i = 0; i <= exponent; i++) {
 79             // temp1 = 1234 / 1000 = 1
 80             tempForReverse = sortedNumber / digitsTester;
 81             // number = 1234 - 1234 / 1000 (=1) * 100 = 234
 82             sortedNumber = sortedNumber - sortedNumber / digitsTester * digitsTester;
 83             // digitsTester = 1000 / 10 = 100
 84             digitsTester = digitsTester / 10;
 85             // reversedNumber = 0 + 1 * 10^0 
 86             reversedNumber = reversedNumber + tempForReverse * (int) Math.pow(10, i);
 87 //            if (reverseTemp1 == 0) {
 88 //        reversedNumber = reversedNumber + (int)Math.pow(10, i);
 89 //            }
 90         }
 91         return reversedNumber;
 92     }
 93     
 94     public static int getDigitsTester(int sortedNumber) {
 95         int digitsTester = 0;
 96         // 计算出number是几位的正整数
 97         // e.g. i = 10; i < 1234; i *= 10
 98         for (int i = 10; i < sortedNumber; i *= 10) {
 99             // digitsTester = 1000
100             digitsTester = i;
101             // if i = 10000 > 1234 , digitsTester = 1000 / 10 = 1000
102             if (i > sortedNumber) {
103                 digitsTester /= 10;
104 //                break;
105             }
106         }
107         return digitsTester;
108     }
109 }

 

数字黑洞 - 6174

标签:

原文地址:http://www.cnblogs.com/fatoland/p/4305687.html

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