昨天我去了一个面试,他们让我创建一个采用整数值的方法,并以数字的降序显示数字。我使用了字符串操作并解决了它,但是他们让我用二进制数技术来完成它。我仍然不知道如何解决这个问题。
答案 0 :(得分:1)
"二进制数技术"?这是一个废话问题,正确的答案是从面试中走出来,因为它是一个废话公司。
无论如何,我能想到的最佳答案是
public static int solveBullshitTaskInASmartWay(int n) {
// get characters and sort them
char[] chars = Integer.toString(n).toCharArray();
Arrays.sort(chars);
// comparators don't work in Java for primitives,
// so you either have to flip the array yourself
// or make an array of Integer or Character
// so that Arrays.sort(T[] a, Comparator<? super T> c)
// can be applied
for (int i = 0, j = chars.length - 1; i < j; i++, j--) {
char t = chars[i]; chars[i] = chars[j]; chars[j] = t;
}
// reconstruct the number
return Integer.parseInt(new String(chars));
}
没有数字方法可以对数字的数字进行排序,如果你期待一个漂亮的数学答案,你会等待一段时间。
编辑:我需要添加这个 - &#34;数字&#34;仅仅是显示数字的属性。它不是数字的属性。在数学上,数字0b1000
与0x8
或0o10
,008.00000
或8e0
(甚至三22
相同,如果有人使用三元组;唉,编程中没有传统的符号)。它只是具有数字的数字的字符串表示。在不使用字符或字符串的情况下解决此问题不仅非常困难,而且愚蠢。
编辑2:这可能是显而易见的,但是我应该明确表示我对OP没有任何关注,我是采访者,我完全应该负责。
答案 1 :(得分:1)
这是一种简单(但不高效)的方式,无需转换为字符串。您可以使用模数和除法从数字中提取数字,对数字执行插入排序,比较它们,并在需要时进行交换。最多需要9 * 8次比较。 这是C ++中的代码
int sortDigits(int number)
{
for(int j = 0; j < 9; ++j) //because number can have 9+1 digits (we don't need 10 because digits are sorted in pairs)
{
int mul = 1;
for(int i = 0; i < 8; ++i) //because with i == 7 mul * 10 is biggest number fitting in int (will extract last digit)
{
if (mul * 10 > number) break; //by doing that we ensure there will be no zeroes added to number
int digitRight = number / mul % 10;
int digitLeft = number / (mul * 10) % 10;
if(digitRight > digitLeft) //swapping digits
{
/*
number -= digitLeft * mul * 10;
number += digitLeft * mul;
number -= digitRight * mul;
number += digitRight * mul * 10;
*/
number -= digitLeft * mul * 9;
number += digitRight * mul * 9;
}
mul *= 10;
}
}
return number;
}