bölünebilir iki basamağı oluşturduğu en küçük sayı bulun ben bir röportajda şu soru soruldu ve benVerilen sayının
oluşturulabilir en küçük numarayı bulmak için bir program yazın nasıl yapılacağı hiçbir ipucu yoktu Belirli bir sayı ile bölünebilen 0 ve 9 ile. verilen sayı ise belirli sayıda çıkışı 90, 2 ise belirli sayıda 10 çıkışı ise
Örneğin, 3 çıkış 90
çevrimiçi bu çözüm bulunmuştur, 9 olmalıdır ama yok Bunu anlayın: -
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;
}
}
Herkes iyi bir anlayış veya alternatif bir çözüm konusunda yardımcı olabilir mi?
1, 10, 11 vb. Ikili sayıları üretir, 1'i 9 ile değiştirir ve bölünebilirlik için sınamalar. Bu kadar. –
'System.out.println (find (299))' -> 500075407' –
@TagirValeev Tamsayı Taşması. Bunun yerine 'long' kullanın ve '90090909909' –