poproszono mnie następujące pytanie w wywiadzie i nie miałem pojęcia jak to zrobićZnajdź najmniejszą liczbę utworzoną przez dwóch cyfr podzielna przez daną liczbę
Napisz program, aby znaleźć najmniejszą liczbę, która może być utworzona przez 0 i 9, który jest podzielny przez podaną liczbę.
Na przykład, jeśli podano ilość wynosi 3 wyjściowy powinien wynosić 9, czy dana liczba jest dwa wyjścia 90, czy dana liczba jest 10 wyjściowy 90
mogę znaleźć tego rozwiązania online, ale nie ma zrozumiał ten jeden bit: -
public class Smallest0And9DivisibleNumber {
public static int find(int divisible) {
int bin = 1;
while (true) {
int res = translate(bin);
if (res % divisible == 0) {
return res;
}
bin += 1;
}
}
private static int translate(int bin) {
int result = 0;
for (int i = Integer.toBinaryString(bin).length(); i > 0; i--) {
result *= result != 0 ? 10 : 0;
int mask = 1 << (i - 1);
result += (bin & mask) == mask ? 9 : 0;
}
return result;
}
public static void main(String[] args) {
assert find(10) == 90;
assert find(99) == 99;
assert find(33) == 99;
assert find(3) == 9;
assert find(333) == 999;
assert find(300) == 900;
assert find(303) == 909;
assert find(3033) == 9099;
assert find(3303) == 9909;
}
}
Czy ktoś może pomóc z dobrym zrozumieniem lub alternatywnym rozwiązaniem?
Generuje liczby binarne 1, 10, 11 itd., Zastępuje cyfrę 1 na 9 i testy na podzielność. To wszystko. –
'System.out.println (find (299))' -> '500075407' –
@TagirValeev Integer Overflow. Zamiast tego użyj 'long' i otrzymasz' 90090909909' –