数字黑洞

数字黑洞

数字黑洞

需要注意的点主要有:1、输入的整数位数若不是四位的话,注意输出格式是要按照四位整数输出,故需要对其进行转换,我使用的是StringBuilder来进行 2、注意输出结果为0的时候还是要输出四位整数的形式,我在这里投机了一下,直接将输出改为了System.out.println(num1+" - "+num2+" = "+"0000");3、有频繁出现相同的代码时,可将此代码转化为函数,在使用时对其进行调用即可。

自己提交的正确代码(有点长):

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18

19

20

21

22

23

24

25

26

27

28

29

30

31

32

33

34

35

36

37

38

39

40

41

42

43

44

45

46

47

48

49

50

51

52

53

54

55

56

57

58

59

60

61

62

63

64

65

66

67

68

69

70

71

72

73

74

75

76

77

78

79

80

81

82

83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100

101

102

103

104

105

106

107

108

109

110

111

112

113

114

115

116

117

118

119

120

121

122

123

124

125

126

127

128

129

130

131

132

133

134

135

136

137

import java.util.Scanner;

public class Main {

    public static void main(String[] args) {

        Scanner in=new Scanner(System.in);

        String str=in.next();

        char[] ch=str.toCharArray();

        int len=ch.length;

        if(len==1 || len==2 || len==3){

            StringBuilder sb=new StringBuilder();

            for(int i=0;i<len;i++)//将输入小于不是四位的整数转换成是四位数

                sb.append(ch[i]);

            for(int i=len;i<4;i++)

                sb.append(0);

            Sub(sb);           

        }

        else if(len==4){

            //将输入的数据进行非递增排序,即递减排序

            int num1=NumDecrease(ch);

            //将输入的数据进行非递减排序,即递增排序

            int num2=NumIncrease(ch);

            //输出两个数相减的结果

            Sub(ch,num1,num2);

            }

        in.close();

    }

 

    private static void Sub(StringBuilder sb) {

        String str=sb.toString();

        char[] ch=str.toCharArray();

        //将输入的数据进行非递增排序,即递减排序

        int num1=NumDecrease(ch);

        //将输入的数据进行非递减排序,即递增排序

        int num2=NumIncrease(ch);

        //输出两个数相减的结果

        int result=num1-num2;

        if(result==0)

            System.out.println(num1+" - "+num2+" = "+"0000");

        else{

            while((result)!=6174 && result!=0){            

                String str1=String.valueOf(num2);

                char[] ch1=str1.toCharArray();

                if(ch1.length<4){

                    StringBuilder sb1=NumberToString(ch1,num2);

                    System.out.println(num1+" - "+sb1+" = "+result);

                }else{

                    System.out.println(num1+" - "+num2+" = "+result);

                }

                String str2=String.valueOf(result);

                ch=str2.toCharArray();

                num1=NumDecrease(ch);

                num2=NumIncrease(ch);

                result=num1-num2;

            }

            String str3=String.valueOf(num2);

            char[] ch2=str3.toCharArray();

            if(ch2.length<4){

                StringBuilder sb2=NumberToString(ch2,num2);

                System.out.println(num1+" - "+sb2+" = "+result);

            }      

        }

        System.out.println(num1+" - "+num2+" = "+result);

    }

 

    private static StringBuilder NumberToString(char[] ch,int num) {

        StringBuilder  sb=new StringBuilder();

        for(int i=0;i<4-ch.length;i++)

            sb.append(0);

        for(int i=0;i<ch.length;i++)

            sb.append(ch[i]);

        return sb;

    }

 

    private static void Sub(char[] ch,int num1,int num2) {//若整数相减还没到6174,则继续将其进行减法操作       

        int result=num1-num2;

        if(result==0)

            System.out.println(num1+" - "+num2+" = "+"0000");

        else{

            while((result)!=6174 && result!=0){

                String str=String.valueOf(num2);

                char[] ch1=str.toCharArray();

                if(ch1.length<4){

                    StringBuilder sb1=NumberToString(ch1,num2);

                    System.out.println(num1+" - "+sb1+" = "+result);

                }else{

                    System.out.println(num1+" - "+num2+" = "+result);

                }

                String str1=String.valueOf(result);

                ch=str1.toCharArray();

                num1=NumDecrease(ch);

                num2=NumIncrease(ch);

                result=num1-num2;

            }

        System.out.println(num1+" - "+num2+" = "+result);

     

        }

    }

 

    public static int NumDecrease(char[] ch) {

        // 非递增排序函数,即递减排序

        int len=ch.length;

        StringBuilder sb=new StringBuilder();

        for(int i=0;i<len-1;i++){

            for(int j=i+1;j<len;j++){

                if(ch[i]<=ch[j]){

                    char temp=ch[j];

                    ch[j]=ch[i];

                    ch[i]=temp;

                }

            }

        }

        for(int i=0;i<len;i++)

            sb.append(ch[i]);

        String str=sb.toString();

        int num=Integer.parseInt(str);

        return num;

    }

 

    public static int NumIncrease(char[] ch) {

        // 非递减排序函数,即递增排序

        int len=ch.length;

        StringBuilder sb=new StringBuilder();

        for(int i=0;i<len-1;i++){

            for(int j=i+1;j<len;j++){

                if(ch[i]>=ch[j]){

                    char temp=ch[j];

                    ch[j]=ch[i];

                    ch[i]=temp;

                }

            }

        }

        for(int i=0;i<len;i++)

            sb.append(ch[i]);

        String str=sb.toString();

        int num=Integer.parseInt(str);

        return num;

    }

}

 

大神代码:

import java.util.Arrays;
  import java.util.Scanner;
  public class NumberBlackHole{
  public static void main(String[] args){
  Scanner in =new Scanner(System.in);
  int n=in.nextInt();
  int[] a=new int[4];
  do{
  for(int i=0;i<4;i++){
  a[i]=n%10;
  n/=10;
  }
  Arrays.sort(a);
  int high=0,low=0;
  for(int i=0;i<4;i++){
  high+=a[3-i]*Math.pow(10,3-i);
  }
  for(int i=0;i<4;i++){
  low+=a[i]*Math.pow(10,3-i);
  }
  n=high-low;
  System.out.println(high+" - "+low+" = "+n);
  if(n==0){
  return;
  }
  }while(n!=6174);
  }
  }