से विभाज्य द्वारा गठित खोजें मैं एक साक्षात्कार में निम्नलिखित प्रश्न पूछा गया था और मैं कैसे करना है यहसबसे छोटी संख्या दो अंक दिए गए नंबर
सबसे छोटी संख्या है कि गठन किया जा सकता को खोजने के लिए एक कार्यक्रम लिखें कोई सुराग नहीं था 0 और 9 जो किसी दिए गए नंबर से विभाजित है।
उदाहरण के लिए, दिए गए संख्या है अगर 3 उत्पादन 9, अगर दी गई संख्या 10 आउटपुट है होना चाहिए, अगर दी गई संख्या 2 उत्पादन 90, है 90
मैं इस समाधान ऑनलाइन पाया है, लेकिन मैं नहीं है यह एक बिट समझा: -
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;
}
}
क्या कोई भी अच्छी समझ या वैकल्पिक समाधान के साथ मदद कर सकता है?
यह बाइनरी संख्या 1, 10, 11, आदि उत्पन्न करता है, 1 के साथ 1 को बदलता है, और विभाजन के लिए परीक्षण करता है। बस इतना ही। –
'System.out.println (ढूंढें (2 9 9))' -> '500075407' –
@TagirValeev इंटीजर ओवरफ़्लो। इसके बजाय 'long' का उपयोग करें और आपको' 90090909909' –