समस्या विवरण
एक संख्या n दी गई है, जांचें कि क्या इसका कोई अंक (0 को छोड़कर) संख्या को पूरी तरह से विभाजित करता है।
उदाहरण
| इनपुट | आउटपुट | व्याख्या |
|---|---|---|
| 53142 | हाँ | 1, 2, 3 से विभाज्य |
| 223 | नहीं | 2 या 3 से विभाज्य नहीं |
| 128625 | हाँ | 5 से विभाज्य |
| 101 | हाँ | 1 से विभाज्य (0 को अनदेखा करें) |
एल्गोरिदम
- मूल संख्या को
tempमें संग्रहीत करें - जब तक
n > 0:- अंतिम अंक प्राप्त करें:
digit = n % 10 - यदि
digit != 0औरtemp % digit == 0→ हाँ लौटाएं n = n / 10(अंतिम अंक हटाएं)
- अंतिम अंक प्राप्त करें:
- लूप समाप्त → नहीं लौटाएं
C प्रोग्राम
#include <stdio.h>
#include <stdbool.h>
bool divisible_by_digit(long long n) {
long long temp = n;
while (n > 0) {
int digit = n % 10;
if (digit != 0 && temp % digit == 0) {
return true;
}
n /= 10;
}
return false;
}
int main() {
long long n;
printf("संख्या दर्ज करें: ");
scanf("%lld", &n);
if (divisible_by_digit(n))
printf("हाँ\n");
else
printf("नहीं\n");
return 0;
}
नमूना आउटपुट
संख्या दर्ज करें: 654123 हाँ
किनारे के मामले
- शून्य अंक: 0 से विभाजन अपरिभाषित है, इसे छोड़ दें
- ऋणात्मक संख्या: निरपेक्ष मान लें या अस्वीकार करें
- एकल अंक: हमेशा हाँ (स्वयं से विभाज्य)
- बड़ी संख्या:
long longका उपयोग करें (19 अंक तक)
विस्तार: सभी विभाजक अंक खोजें
void print_dividing_digits(long long n) {
long long temp = n;
bool found = false;
printf("%lld को विभाजित करने वाले अंक: ", n);
while (n > 0) {
int d = n % 10;
if (d != 0 && temp % d == 0) {
printf("%d ", d);
found = true;
}
n /= 10;
}
if (!found) printf("कोई नहीं");
printf("\n");
}
जटिलता
- समय: O(log₁₀ n) - अंकों की संख्या
- स्थान: O(1)