标签:
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 }
标签:
原文地址:http://www.cnblogs.com/fatoland/p/4305687.html