समस्या विवरण
एक स्ट्रिंग के रूप में दी गई संख्या और एक आधार (2 से 16) दिया गया है, जांचें कि क्या संख्या उस आधार में मान्य है।
संख्या प्रणाली आधार
| आधार | नाम | मान्य अंक |
| 2 | बाइनरी | 0, 1 |
| 8 | ऑक्टल | 0-7 |
| 10 | दशमलव | 0-9 |
| 16 | हेक्साडेसिमल | 0-9, A-F |
उदाहरण
| इनपुट स्ट्रिंग | आधार | आउटपुट | व्याख्या |
| "1010" | 2 | हाँ | केवल 0,1 हैं |
| "1AA4" | 16 | हाँ | मान्य हेक्स अंक |
| "1610" | 2 | नहीं | 6,1 बाइनरी में अमान्य |
| "AF87" | 16 | हाँ | मान्य हेक्स |
एल्गोरिदम
- यदि आधार > 16 → गलत लौटाएं
- यदि आधार ≤ 10: जांचें कि सभी वर्ण '0' से '0'+आधार-1 के बीच हैं
- यदि आधार > 10: जांचें कि वर्ण '0'-'9' या 'A' से 'A'+आधार-11 तक हैं
C प्रोग्राम
#include <stdio.h>
#include <ctype.h>
#include <string.h>
#include <stdbool.h>
bool isInGivenBase(char str[], int base) {
if (base > 16 || base < 2) return false;
for (int i = 0; i < strlen(str); i++) {
char c = toupper(str[i]);
int val;
if (c >= '0' && c <= '9')
val = c - '0';
else if (c >= 'A' && c <= 'F')
val = c - 'A' + 10;
else
return false; // अमान्य वर्ण
if (val >= base)
return false; // इस आधार के लिए अंक बहुत बड़ा
}
return true;
}
int main() {
char str[100];
int base;
printf "संख्या स्ट्रिंग दर्ज करें: ";
scanf("%s", str);
printf "आधार दर्ज करें (2-16): ");
scanf("%d", &base);
if (isInGivenBase(str, base))
printf("हाँ, '%s' आधार %d में मान्य है\n", str, base);
else
printf("नहीं, '%s' आधार %d में अमान्य है\n", str, base);
return 0;
}
नमूना आउटपुट
संख्या स्ट्रिंग दर्ज करें: AF87
आधार दर्ज करें (2-16): 16
हाँ, 'AF87' आधार 16 में मान्य है
वैकल्पिक: मानक पुस्तकालय का उपयोग
#include <stdlib.h>
bool isValidBase(char *str, int base) {
char *endptr;
strtol(str, &endptr, base);
return (*endptr == '\0' && endptr != str);
}
उपयोग के मामले
- उपयोगकर्ता इनपुट सत्यापन
- कॉम्पिलर/इंटरप्रेटर लेक्सिकल विश्लेषण
- डेटा पार्सिंग और रूपांतरण
- एम्बेडेड सिस्टम में कॉन्फ़िगरेशन सत्यापन