对于给定的数字,我想从数字中生成最大的数字。
例如: 输入: 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);
任何想法如何更改上面的代码以实现我想要的?
答案 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;
}
}
}
}
}
如果您要求数字不能以 0 开头,则需要将其与位于array [1]的第二大数字交换,即 array [0] <->数组[1]