找到最大的数字

时间:2019-03-27 11:37:03

标签: java

对于给定的数字,我想从数字中生成最大的数字。

例如:   输入: 3134059 ,最大的数字是: 9543310   最小的数字是: 1033459

我发现算法产生了期望的结果,但是当数字包含 0

时,我得到了错误的结果
int number = 4214173;
int sorted = 0;
int digits = 10;
int sortedDigits = 1;
boolean first = true;

while (number > 0) {
    int digit = number % 10;

    if (!first) {

        int tmp = sorted;
        int toDivide = 1;
        for (int i = 0; i < sortedDigits; i++) {
            int tmpDigit = tmp % 10;
            if (digit >= tmpDigit) {
                sorted = sorted / toDivide * toDivide * 10 + digit * toDivide + sorted % toDivide;
                break;
            } else if (i == sortedDigits - 1) {
                sorted = digit * digits + sorted;
            }
            tmp /= 10;
            toDivide *= 10;
        }
        digits *= 10;
        sortedDigits += 1;
    } else {
        sorted = digit;
    }

    first = false;
    number = number / 10;
}
System.out.println(sorted);

任何想法如何更改上面的代码以实现我想要的?

2 个答案:

答案 0 :(得分:0)

只需从source复制代码,然后将 << / strong>符号更改为> 工作正常

int a = 451467;
    int b = a;
    int i = 1;
    int length = (int) Math.log10(a) + 1;   // getting the number of digits
    for (int j = 0; j < length - 1; j++) {
        b = a;
        i = 1;
        while (b > 9) {
            int s = b % 10;                // getting the last digit
            int r = (b % 100) / 10;        // getting the second last digit
            if (s > r) {
                a = a + s * i * 10 - s * i - r * i * 10 + r * i; // switching the digits
            }
            b = a;
            i = i * 10;
            b = b / i;                     // removing the last digit from the number
        }
    }
    System.out.println(a);
}

答案 1 :(得分:0)

[编辑] 以下是一个更简单的解决方案:

  public static int largest(int number) {

    int sorted = 0;
    for (int i = 9; i >= 0; i--) {
        int temp = number;
        while (temp > 0) {
            int digit = temp % 10;
            if (digit == i) {
                sorted *= 10;
                sorted += digit;
            }
            temp /= 10;
        }
    }
   return sorted;
}

这是使用递归气泡排序(大声笑)

的另一种实现方式
package bigestnumber;
import java.util.ArrayList;


public class BigestNumber {

    public static void main(String[] args) {

        int num = 3134059;
        ArrayList<Integer> ls = getDigits(num);

        Integer[] res = new Integer[ls.size()];    
        ls.toArray(res);

        //smallest
        //bubbleSort(res);

        // biggest
        reverseBubbleSort(res);

        for(int y : res)
            System.out.print(y);


    }

    public static ArrayList<Integer> getDigits(int num) {

        ArrayList<Integer> digits = new ArrayList<Integer>();

        collectDigits(num, digits);

        return digits;
    }

    private static void collectDigits(int num, ArrayList<Integer> digits) {
        if (num / 10 > 0) {
            collectDigits(num / 10, digits);
        }
        digits.add(num % 10);
    }

    private static void bubbleSort(Integer[] arr) {
        int n = arr.length;
        int temp = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 1; j < (n - i); j++) {
                if (arr[j - 1] > arr[j]) {
                    temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }



    private static void reverseBubbleSort(Integer[] arr) {
        int n = arr.length;
        int temp = 0;
        for (int i = 0; i < n; i++) {
            for (int j = 1; j < (n - i); j++) {
                if (arr[j - 1] < arr[j]) {
                    temp = arr[j - 1];
                    arr[j - 1] = arr[j];
                    arr[j] = temp;
                }
            }
        }
    }

}
  1. 将数字收集到一个列表中,然后将列表转换为数组
  2. 排序数组

如果您要求数字不能以 0 开头,则需要将其与位于array [1]的第二大数字交换,即 array [0] <->数组[1]