Напишите код для преобразования заданного числа в слова (например, 1234, поскольку на входе должно быть выведено тысяча двести тридцать четыре)

Напишите C / C ++ / Java-код для преобразования заданного числа в слова.

например:-
Входные данные:
1234

Выход:
Тысяча двести тридцать четыре.

Входные данные:
10

Выход:
Десять

Требует ли он полного переключения для цифр от 0 до 10.

Добавляя «teen» после каждого числового имени (например, 14: четыре «teen».) От 14 до 19.

А затем добавление «ты» и цифры цифры для номера в диапазоне от 20 до 99.

И так далее.

Я думаю, что должен быть какой-то гораздо лучший подход для решения этой проблемы.

Код C является предпочтительным.

2

Решение

#include<iostream>
using namespace std;
void expand(int);
int main()
{
int num;
cout<<"Enter a number : ";
cin>>num;
expand(num);
}
void expand(int value)
{
const char * const ones[20] = {"zero", "one", "two", "three","four","five","six","seven",
"eight","nine","ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen",
"eighteen","nineteen"};
const char * const tens[10] = {"", "ten", "twenty", "thirty","forty","fifty","sixty","seventy",
"eighty","ninety"};

if(value<0)
{
cout<<"minus ";
expand(-value);
}
else if(value>=1000)
{
expand(value/1000);
cout<<" thousand";
if(value % 1000)
{
if(value % 1000 < 100)
{
cout << " and";
}
cout << " " ;
expand(value % 1000);
}
}
else if(value >= 100)
{
expand(value / 100);
cout<<" hundred";
if(value % 100)
{
cout << " and ";
expand (value % 100);
}
}
else if(value >= 20)
{
cout << tens[value / 10];
if(value % 10)
{
cout << " ";
expand(value % 10);
}
}
else
{
cout<<ones[value];
}
return;
}
11

Другие решения

Вместо операторов switch рассмотрите возможность использования таблиц строк, проиндексированных небольшим значением.

const char * const ones[20] = {"zero", "one", "two", ..., "nineteen"};
const char * const tens[10] = {"", "ten", "twenty", ..., "ninety"};

Теперь разбейте проблему на мелкие кусочки. Напишите функцию, которая может выводить однозначное число. Затем напишите функцию, которая может обрабатывать двузначное число (которое, вероятно, будет использовать предыдущую функцию). Продолжайте наращивать функции по мере необходимости.

Создайте список тестовых случаев с ожидаемым выводом и напишите код для вызова ваших функций и проверки выходных данных, чтобы при устранении проблем в более сложных случаях вы могли быть уверены, что более простые случаи продолжают работать.

3

если вы заинтересованы в готовом решении, вы можете обратиться к библиотеке HumanizerCpp (https://github.com/trodevel/HumanizerCpp) — это порт библиотеки C # Humanizer, и он делает именно то, что вы хотите.

Он даже может конвертировать в ординалы и в настоящее время поддерживает 3 языка: английский, немецкий и русский.

Пример:

const INumberToWordsConverter * e = Configurator::GetNumberToWordsConverter( "en" );

std::cout << e->Convert( 123 ) << std::endl;
std::cout << e->Convert( 1234 ) << std::endl;
std::cout << e->Convert( 12345 ) << std::endl;
std::cout << e->Convert( 123456 ) << std::endl;

std::cout << std::endl;
std::cout << e->ConvertToOrdinal( 1001 ) << std::endl;
std::cout << e->ConvertToOrdinal( 1021 ) << std::endl;const INumberToWordsConverter * g = Configurator::GetNumberToWordsConverter( "de" );

std::cout << std::endl;
std::cout << g->Convert( 123456 ) << std::endl;

const INumberToWordsConverter * r = Configurator::GetNumberToWordsConverter( "ru" );

std::cout << r->ConvertToOrdinal( 1112 ) << std::endl;

Выход:

one hundred and twenty-three
one thousand two hundred and thirty-four
twelve thousand three hundred and forty-five
one hundred and twenty-three thousand four hundred and fifty-six

thousand and first
thousand and twenty-first

einhundertdreiundzwanzigtausendvierhundertsechsundfünfzig
одна тысяча сто двенадцатый

В любом случае вы можете взглянуть на исходный код и повторно использовать его в своем проекте или попытаться понять логику. Он написан на чистом C ++ без внешних библиотек.

С Уважением,
саржа

2

/* This Program will convert Numbers from -999,999,999 to 999,999,999 into words */

#include <vector>
#include <iostream>
#include <stdexcept>
#include <string>

using namespace std;

const std::vector<std::string> first14 = { "zero", "one", "two", "three", "four", "five", "six", "seven", "eight", "nine", "ten", "eleven", "twelve", "thirteen", "fourteen" };
const std::vector<std::string> prefixes = { "twen", "thir", "for", "fif", "six", "seven", "eigh", "nine" };

std::string inttostr(const int number)
{
if (number < 0)
{
return "minus " + inttostr(-number);
}
if (number <= 14)
return first14.at(number);
if (number < 20)
return prefixes.at(number - 12) + "teen";
if (number < 100) {
unsigned int remainder = number - (static_cast<int>(number / 10) * 10);
return prefixes.at(number / 10 - 2) + (0 != remainder ? "ty " + inttostr(remainder) : "ty");
}
if (number < 1000) {
unsigned int remainder = number - (static_cast<int>(number / 100) * 100);
return first14.at(number / 100) + (0 != remainder ? " hundred " + inttostr(remainder) : " hundred");
}
if (number < 1000000) {
unsigned int thousands = static_cast<int>(number / 1000);
unsigned int remainder = number - (thousands * 1000);
return inttostr(thousands) + (0 != remainder ? " thousand " + inttostr(remainder) : " thousand");
}
if (number < 1000000000) {
unsigned int millions = static_cast<int>(number / 1000000);
unsigned int remainder = number - (millions * 1000000);
return inttostr(millions) + (0 != remainder ? " million " + inttostr(remainder) : " million");
}
throw std::out_of_range("inttostr() value too large");
}

int main()
{
int num;
cout << "Enter a number to convert it into letters : ";
cin >> num;
cout << endl << num << " = " << inttostr(num) << endl;
system("pause");
return 0;
}
1

Работает на любой номер от 0 в 999999999.

Эта программа получает число от пользователя, делит его на три части и сохраняет их отдельно в массиве. Три числа передаются через функцию, которая преобразует их в слова.
Затем он добавляет «миллион» к первой части и «тысячу» ко второй части.

#include <iostream>
using namespace std;
int buffer = 0, partFunc[3] = {0, 0, 0}, part[3] = {0, 0, 0}, a, b, c, d;
long input, nFake = 0;
const char ones[][20] = {"",       "one",       "two",      "three",
"four",    "five",      "six",      "seven",
"eight",   "nine",      "ten",      "eleven",
"twelve",  "thirteen",  "fourteen", "fifteen",
"sixteen", "seventeen", "eighteen", "nineteen"};
const char tens[][20] = {"",     "ten",   "twenty",  "thirty", "forty",
"fifty", "sixty", "seventy", "eighty", "ninety"};
void convert(int funcVar);
int main() {
cout << "Enter the number:";
cin >> input;
nFake = input;
buffer = 0;
while (nFake) {
part[buffer] = nFake % 1000;
nFake /= 1000;
buffer++;
}
if (buffer == 0) {
cout << "Zero.";
} else if (buffer == 1) {
convert(part[0]);
} else if (buffer == 2) {
convert(part[1]);
cout << " thousand,";
convert(part[0]);
} else {
convert(part[2]);
cout << " million,";

if (part[1]) {
convert(part[1]);
cout << " thousand,";
} else {
cout << "";
}
convert(part[0]);
}
system("pause");
return (0);
}

void convert(int funcVar) {
buffer = 0;
if (funcVar >= 100) {
a = funcVar / 100;
b = funcVar % 100;
if (b)
cout << " " << ones[a] << " hundred and";
else
cout << " " << ones[a] << " hundred ";
if (b < 20)
cout << " " << ones[b];
else {
c = b / 10;
cout << " " << tens[c];
d = b % 10;
cout << " " << ones[d];
}
} else {
b = funcVar;
if (b < 20)
cout << ones[b];
else {
c = b / 10;
cout << tens[c];
d = b % 10;
cout << " " << ones[d];
}
}
}
1
#include<stdio.h>
#include<conio.h>
void main()
{
int len=0,revnum,i,dup=0,j=0,k=0;

long int gvalue;

char  ones[]  [10]={"one","Two","Three","Four","Five","Six","Seven","Eight","Nine","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",""};

char twos[][10]={"Ten","Twenty","Thirty","Fourty","fifty","Sixty","Seventy","eighty","Ninety",""};

clrscr();printf("\n Enter value");

scanf("%ld",&gvalue);
if(gvalue==10)

printf("Ten");

else if(gvalue==100)

printf("Hundred");

else if(gvalue==1000)

printf("Thousand");

dup=gvalue;

for(i=0;dup>0;i++)
{
revnum=revnum*10+dup%10;

len++;

dup=dup/10;

}

while(j<len)

{

if(gvalue<10)

{

printf("%s ",ones[gvalue-1]);

}

else if(gvalue>10&&gvalue<=19)

{

printf("%s ",ones[gvalue-2]);

break;

}

else if(gvalue>19&&gvalue<100)

{

k=gvalue/10;

gvalue=gvalue%10;

printf("%s ",twos[k-1]);

}

else if(gvalue>100&&gvalue<1000)

{

k=gvalue/100;

gvalue=gvalue%100;

printf("%s Hundred ",ones[k-1]);

}

else if(gvalue>=1000&&gvlaue<9999)

{

k=gvalue/1000;

gvalue=gvalue%1000;

printf("%s Thousand ",ones[k-1]);

}

else if(gvalue>=11000&&gvalue<=19000)

{

k=gvalue/1000;

gvalue=gvalue%1000;

printf("%s Thousand ",twos[k-2]);

}

else if(gvalue>=12000&&gvalue<100000)

{

k=gvalue/10000;

gvalue=gvalue%10000;

printf("%s ",ones[gvalue-1]);

}

else

{

printf("");

}

j++;

getch();

}
0
import java.lang.*;
import java.io.*;
public class rupee
{
public static void main(String[] args)throws  IOException
{

int len=0,revnum=0,i,dup=0,j=0,k=0;
int gvalue;
String[] ones={"one","Two","Three","Four","Five","Six","Seven","Eight","Nine","Eleven","Twelve","Thirteen","Fourteen","Fifteen","Sixteen","Seventeen","Eighteen","Nineteen",""};
String[] twos={"Ten","Twenty","Thirty","Fourty","fifty","Sixty","Seventy","eighty","Ninety",""};
System.out.println("\n Enter value");
InputStreamReader b=new InputStreamReader(System.in);
BufferedReader br=new BufferedReader(b);
gvalue=Integer.parseInt(br.readLine());
if(gvalue==10)

System.out.println("Ten");

else if(gvalue==100)

System.out.println("Hundred");

else if(gvalue==1000)
System.out.println("Thousand");

dup=gvalue;
for(i=0;dup>0;i++)
{
revnum=revnum*10+dup%10;
len++;
dup=dup/10;
}
while(j<len)
{
if(gvalue<10)
{
System.out.println(ones[gvalue-1]);
}
else if(gvalue>10&&gvalue<=19)
{
System.out.println(ones[gvalue-2]);
break;
}
else if(gvalue>19&&gvalue<100)
{
k=gvalue/10;
gvalue=gvalue%10;
System.out.println(twos[k-1]);
}
else if(gvalue>100&&gvalue<1000)
{
k=gvalue/100;
gvalue=gvalue%100;
System.out.println(ones[k-1] +"Hundred");
}
else if(gvalue>=1000&&gvalue<9999)
{
k=gvalue/1000;
gvalue=gvalue%1000;
System.out.println(ones[k-1]+"Thousand");
}
else if(gvalue>=11000&&gvalue<=19000)
{
k=gvalue/1000;
gvalue=gvalue%1000;
System.out.println(twos[k-2]+"Thousand");
}
else if(gvalue>=12000&&gvalue<100000)
{
k=gvalue/10000;
gvalue=gvalue%10000;
System.out.println(ones[gvalue-1]);
}
else
{
System.out.println("");
}
j++;
}
}
}
0
/*Maximum value that can be entered is 2,147,483,647
* Program to convert entered number into string
* */
import java.util.Scanner;

public class NumberToWords
{

public static void main(String[] args)
{
double num;//for taking input number
Scanner obj=new Scanner(System.in);
do
{
System.out.println("\n\nEnter the Number (Maximum value that can be entered is 2,147,483,647)");
num=obj.nextDouble();
if(num<=2147483647)//checking if entered number exceeds maximum integer value
{
int number=(int)num;//type casting double number to integer number
splitNumber(number);//calling splitNumber-it will split complete number in pairs of 3 digits
}
else
System.out.println("Enter smaller value");//asking user to enter a smaller value compared to 2,147,483,647
}while(num>2147483647);
}
//function to split complete number into pair of 3 digits each
public static void splitNumber(int number)
{   //splitNumber array-contains the numbers in pair of 3 digits
int splitNumber[]=new int[4],temp=number,i=0,index;
//splitting number into pair of 3
if(temp==0)
System.out.println("zero");
while(temp!=0)
{
splitNumber[i++]=temp%1000;
temp/=1000;
}
//passing each pair of 3 digits to another function
for(int j=i-1;j>-1;j--)
{   //toWords function will split pair of 3 digits to separate digits
if(splitNumber[j]!=0)
{toWords(splitNumber[j]);
if(j==3)//if the number contained more than 9 digits
System.out.print("billion,");
else if(j==2)//if the number contained more than 6 digits & less than 10 digits
System.out.print("million,");
else if(j==1)
System.out.print("thousand,");//if the number contained more than 3 digits & less than 7 digits
}
}
}
//function that splits number into individual digits
public static void toWords(int number)
//splitSmallNumber array contains individual digits of number passed to this function
{   int splitSmallNumber[]=new int[3],i=0,j;
int temp=number;//making temporary copy of the number
//logic to split number into its constituent digits

while(temp!=0)
{
splitSmallNumber[i++]=temp%10;
temp/=10;
}
//printing words for each digit
for(j=i-1;j>-1;j--)
//{   if the digit is greater than zero
if(splitSmallNumber[j]>=0)
//if the digit is at 3rd place or if digit is at (1st place with digit at 2nd place not equal to zero)
{   if(j==2||(j==0 && (splitSmallNumber[1]!=1)))
{
switch(splitSmallNumber[j])
{

case 1:System.out.print("one ");break;
case 2:System.out.print("two ");break;
case 3:System.out.print("three ");break;
case 4:System.out.print("four ");break;
case 5:System.out.print("five ");break;
case 6:System.out.print("six ");break;
case 7:System.out.print("seven ");break;
case 8:System.out.print("eight ");break;
case 9:System.out.print("nine ");break;

}

}
//if digit is at 2nd place
if(j==1)
{       //if digit at 2nd place is 0 or 1
if(((splitSmallNumber[j]==0)||(splitSmallNumber[j]==1))&& splitSmallNumber[2]!=0 )
System.out.print("hundred ");
switch(splitSmallNumber[1])
{   case 1://if digit at 2nd place is 1 example-213
switch(splitSmallNumber[0])
{
case 1:System.out.print("eleven ");break;
case 2:System.out.print("twelve ");break;
case 3:System.out.print("thirteen ");break;
case 4:System.out.print("fourteen ");break;
case 5:System.out.print("fifteen ");break;
case 6:System.out.print("sixteen ");break;
case 7:System.out.print("seventeen ");break;
case 8:System.out.print("eighteen ");break;
case 9:System.out.print("nineteen ");break;
case 0:System.out.print("ten ");break;
}break;
//if digit at 2nd place is not 1
case 2:System.out.print("twenty ");break;
case 3:System.out.print("thirty ");break;
case 4:System.out.print("forty ");break;
case 5:System.out.print("fifty ");break;
case 6:System.out.print("sixty ");break;
case 7:System.out.print("seventy ");break;
case 8:System.out.print("eighty ");break;
case 9:System.out.print("ninety ");break;
//case 0:   System.out.println("hundred ");break;

}
}
}
}

}
0
По вопросам рекламы ammmcru@yandex.ru
Adblock
detector