数字黑洞

需要注意的点主要有: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);
  }
  }

 

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值