संख्यात्मक मानों वाली एक स्ट्रिंग को देखते हुए, कार्य उन दी गई संख्याओं को शब्दों में छिपाना है।
जैसे हमारे पास एक इनपुट “361” है; तो आउटपुट शब्दों में होना चाहिए अर्थात "तीन सौ इकसठ"। निम्नलिखित समस्या के समाधान के लिए हमें संख्याओं और स्थानों जैसे इकाई, दहाई, हजारों आदि को ध्यान में रखना होगा।
कोड केवल 4 अंकों की संख्या यानी 0 से 9999 तक का समर्थन करता है। इसलिए इनपुट 0 से 9999 तक होना चाहिए।
आइए हम 1,111 पर विचार करें ताकि स्थान इस प्रकार होंगे -
उदाहरण
Input: “1234” Output: one thousand two hundred thirty four Input: “7777” Output: seven thousand seven hundred seventy seven
दृष्टिकोण हम दी गई समस्या को हल करने के लिए उपयोग करेंगे -
- इनपुट को एक स्ट्रिंग के रूप में लें।
- विभिन्न मानों के लिए सरणियाँ बनाना।
- लंबाई के अनुसार इनपुट की लंबाई की जांच करके हम तय करेंगे कि हम किन जगहों पर आउटपुट दिखाएंगे।
- स्थानों के अनुसार आउटपुट दिखाएगा।
एल्गोरिदम
Start Step 1 → In function convert(char *num) Declare and initialize int len = strlen(num) If len == 0 then, fprintf(stderr, "empty string\n") Return End If If len > 4 then, fprintf(stderr, "Length more than 4 is not supported\n") Return End If Declare and initialize a char *single_digit[] = { "zero", "one", "two","three", "four","five","six", "seven", "eight", "nine"} Declare and initialize a char *tens_place[] = {"", "ten", "eleven", "twelve","thirteen", "fourteen","fifteen", "sixteen","seventeen", "eighteen", "nineteen"} Declare and Initialize a char *tens_multiple[] = {"", "", "twenty", "thirty", "forty", "fifty","sixty", "seventy", "eighty", "ninety"} Declare and initialize char *tens_power[] = {"hundred", "thousand"} Print num If len == 1 then, Print single_digit[*num - '0'] Return End If While *num != '\0 If len >= 3 If *num -'0' != 0 Print single_digit[*num - '0'] Print tens_power[len-3] End If Decrement len by 1 End If Else If *num == '1' then, Set sum = *num - '0' + *(num + 1)- '0' Print tens_place[sum] Return End If Else If *num == '2' && *(num + 1) == '0' then, Print “twenty” Return End else If Else Set i = *num - '0' Print i? tens_multiple[i]: "" Increment num by 1 If *num != '0' then, Print single_digit[*num - '0'] End If End Else Increment num by 1 End Else End while Step 2 → In function main() Call function convert("9132") Stop
उदाहरण
#include <stdio.h> #include <string.h> #include <stdlib.h> //function to print the given number in words void convert(char *num) { int len = strlen(num); // cases if (len == 0) { fprintf(stderr, "empty string\n"); return; } if (len > 4) { fprintf(stderr, "Length more than 4 is not supported\n"); return; } // the first string wont be used. char *single_digit[] = { "zero", "one", "two", "three", "four","five", "six", "seven", "eight", "nine"}; // The first string is not used, it is to make // array indexing simple char *tens_place[] = {"", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; // The first two string are not used, they are to make // array indexing simple char *tens_multiple[] = {"", "", "twenty", "thirty", "forty", "fifty","sixty", "seventy", "eighty", "ninety"}; char *tens_power[] = {"hundred", "thousand"}; // Used for debugging purpose only printf("\n%s: ", num); // For single digit number if (len == 1) { printf("%s\n", single_digit[*num - '0']); return; } // Iterate while num is not '\0' while (*num != '\0') { // Code path for first 2 digits if (len >= 3) { if (*num -'0' != 0) { printf("%s ", single_digit[*num - '0']); printf("%s ", tens_power[len-3]); // here len can be 3 or 4 } --len; } // Code path for last 2 digits else { // Need to explicitly handle 10-19. Sum of the two digits is //used as index of "tens_place" array of strings if (*num == '1') { int sum = *num - '0' + *(num + 1)- '0'; printf("%s\n", tens_place[sum]); return; } // Need to explicitely handle 20 else if (*num == '2' && *(num + 1) == '0') { printf("twenty\n"); return; } // Rest of the two digit numbers i.e., 21 to 99 else { int i = *num - '0'; printf("%s ", i? tens_multiple[i]: ""); ++num; if (*num != '0') printf("%s ", single_digit[*num - '0']); } } ++num; } } int main() { convert("9132"); return 0; }
आउटपुट
nine thousand one hundred thirty two