নিউমেরিক্যাল ভ্যালু বিশিষ্ট একটি স্ট্রিং দেওয়া থাকলে, টাস্ক হলো দেওয়া সংখ্যাগুলো শব্দে রূপান্তর করা।
যেমন ইনপুট "361" থাকলে আউটপুট শব্দে হবে "Three hundred sixty one"। এই সমস্যা সমাধানের জন্য আমাদের নম্বর এবং তার প্লেস ভ্যালু ( Ones, Tens, Thousands ইত্যাদি) খেয়াল রাখতে হবে।
কোডটি শুধু ৪ ডিজিট পর্যন্ত (০ থেকে ৯৯৯৯) সাপোর্ট করে। সুতরাং ইনপুট ০ থেকে ৯৯৯৯ পর্যন্ত হতে হবে।
আমরা ১,১১১ বিবেচনা করি, তাহলে প্লেসগুলো হবে −

উদাহরণ
ইনপুট: "1234" আউটপুট: one thousand two hundred thirty four ইনপুট: "7777" আউটপুট: seven thousand seven hundred seventy seven
দেওয়া সমস্যা সমাধানের জন্য আমরা যে পদ্ধতি ব্যবহার করব −
- ইনপুট স্ট্রিং হিসেবে নিন।
- বিভিন্ন ভ্যালুর জন্য অ্যারে তৈরি করুন।
- ইনপুটের দৈর্ঘ্য অনুযায়ী সিদ্ধান্ত নিন কত প্লেস পর্যন্ত আউটপুট দেখাবে।
- প্লেস অনুযায়ী আউটপুট দেখান।
অ্যালগরিদম
Start
ধাপ ১ → function convert(char *num) এ
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
char *single_digit[] = { "zero", "one", "two","three", "four","five","six", "seven", "eight", "nine"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
char *tens_place[] = {"", "ten", "eleven", "twelve","thirteen", "fourteen","fifteen", "sixteen","seventeen", "eighteen", "nineteen"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
char *tens_multiple[] = {"", "", "twenty", "thirty", "forty", "fifty","sixty", "seventy", "eighty", "ninety"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
char *tens_power[] = {"hundred", "thousand"} ডিক্লেয়ার ও ইনিশিয়ালাইজ
num প্রিন্ট
If len == 1 then,
single_digit[*num - '0'] প্রিন্ট
Return
End If
While *num != '\0'
If len >= 3
If *num -'0' != 0
single_digit[*num - '0'] প্রিন্ট
tens_power[len-3] প্রিন্ট
End If
len ১ কমান
End If
Else
If *num == '1' then,
sum = *num - '0' + *(num + 1)- '0' সেট
tens_place[sum] প্রিন্ট
Return
End If
Else If *num == '2' && *(num + 1) == '0' then,
"twenty" প্রিন্ট
Return
End else If
Else
i = *num - '0' সেট
i? tens_multiple[i]: "" প্রিন্ট
num ১ বাড়ান
If *num != '0' then,
single_digit[*num - '0'] প্রিন্ট
End If
End Else
num ১ বাড়ান
End Else
End while
ধাপ ২ → main()-এ
convert("9132") ফাংশন কল
Stop
উদাহরণ
#include <stdio.h>
#include <string.h>
#include <stdlib.h>
// দেওয়া নম্বর শব্দে প্রিন্ট করার ফাংশন
void convert(char *num) {
int len = strlen(num);
// কেসগুলো
if (len == 0) {
fprintf(stderr, "empty string\n");
return;
}
if (len > 4) {
fprintf(stderr, "Length more than 4 is not supported\n");
return;
}
// প্রথম স্ট্রিং ব্যবহার হবena
char *single_digit[] = { "zero", "one", "two", "three", "four","five", "six", "seven", "eight", "nine"};
// প্রথম স্ট্রিং ব্যবহার হবena, অ্যারের ইনডেক্সিং সহজ করতে
char *tens_place[] = {"", "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen"};
// প্রথম দুটি স্ট্রিং ব্যবহার হবena, অ্যারের ইনডেক্সিং সহজ করতে
char *tens_multiple[] = {"", "", "twenty", "thirty", "forty", "fifty","sixty", "seventy", "eighty", "ninety"};
char *tens_power[] = {"hundred", "thousand"};
// ডিবাগিং উদ্দেশ্যে মাত্র
printf("\n%s: ", num);
// সিঙ্গেল ডিজিট নম্বরের জন্য
if (len == 1) {
printf("%s\n", single_digit[*num - '0']);
return;
}
// num '\0' না হওয়া পর্যন্ত ইটারেট
while (*num != '\0') {
// প্রথম ২ ডিজিটের জন্য কোড পথ
if (len >= 3) {
if (*num -'0' != 0) {
printf("%s ", single_digit[*num - '0']);
printf("%s ", tens_power[len-3]); // এখানে len 3 বা 4 হতে পারে
}
--len;
}
// শেষ ২ ডিজিটের জন্য কোড পথ
else {
// 10-19 এক্সপ্লিসিটলি হ্যান্ডল করতে হবে। দুটি ডিজিটের যোগফল
// "tens_place" স্ট্রিং অ্যারে-এর ইনডেক্স হিসেবে ব্যবহৃত হয়
if (*num == '1') {
int sum = *num - '0' + *(num + 1)- '0';
printf("%s\n", tens_place[sum]);
return;
}
// 20 এক্সপ্লিসিটলি হ্যান্ডল করতে হবে
else if (*num == '2' && *(num + 1) == '0') {
printf("twenty\n");
return;
}
// বাকি টু-ডিজিট নম্বরগুলো অর্থাৎ 21 থেকে 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