Форум программистов, компьютерный форум CyberForum.ru

Представить любое целое число словесной записью - C++

Восстановить пароль Регистрация
 
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
11.11.2012, 15:21     Представить любое целое число словесной записью #1
Вот пытаюсь написать программу для перевода любого целого числа в словесную запись. Например пользователь вводит 123 а в результате программа должна напечатать "сто двадцать три". Дошел до 999 а дальше не могу. Чем больше число тем больше приходится делать проверок и программа слишком быстро разрастается.
Может есть какой более легкий алгоритм? Подскажите что-нибудь. Буду за любую помощь благодарен

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
#include "stdafx.h"
#include "iostream"
using namespace std;
 
int _tmain(int argc, _TCHAR* argv[])
{
    setlocale(LC_ALL, "Russian");
 
    int n;
    char str_res[50] = "";      // результат
    char *str0_9[] = {"ноль", "один", "два", "три", "четыре", "пять", "шесть", "семь", "восемь", "девять"};
    char *str10_19[] = {"десять", "одиннадцать", "двенадцать", "тринадцать", "четырнадцать", "пятнадцать", "шестнадцать", "семнадцать", "восемнадцать", "девятнадцать"};
    char *str20_90[] = {"двадцать", "тридцать", "сорок", "пятьдесят", "шестьдесят", "семьдесят", "восемьдесят", "девяносто"};
    char *str100_900[] = {"сто", "двести", "триста", "четыреста", "пятьсот", "шестьсот", "семьсот", "восемьсот", "девятьсот"};
 
    cout << "Введите целое число: ";
    cin >> n;
 
    if (n>=0 && n<=9)       // 0 1 2 3 4 5 6 7 8 9
        strcpy(str_res, str0_9[n]);
    else
        if (n>=10 && n<=19)     // 10 11 12 13 14 15 16 17 18 19
            strcpy(str_res, str10_19[n%10]);
        else
            if (n>=20 && n<=90 && n%10==0)  // 20 30 40 50 60 70 80 90
                strcpy(str_res, str20_90[n/10-2]);
            else
                if (n>=21 && n<=99)     // 21 22 23 24 25 26 27 28 29  |  31 32 33 34 35 36 37 38 39  | ... | 91 92 93 94 95 96 97 98 99
                {
                    strcpy(str_res, str20_90[n/10-2]);
                    strcat(str_res, " ");
                    strcat(str_res, str0_9[n%10]);
                }
                else
                    if (n>=100 && n<=900 && n%100==0)   // 100 200 300 400 500 600 700 800 900
                        strcpy(str_res, str100_900[n/100-1]);
                    else
                        if (n>=101 && n<=999)           // 101 102 103 104 105 106 107 108 109 | 111 112 113 114 116 ... 198 199 | 201 202 ... | 991 992 993 994 995 996 997 998 999
                        {
                            strcpy(str_res, str100_900[n/100-1]);
                            strcat(str_res, " ");
 
                            n%=100;                     // n = 123; n = 123 % 100 = 23;  n=105; 105%100=5
                            
                            if (n>=0 && n<=9)           // 103 104 105 106 107 108 109 | 203 204 205 206 207 208 209 | ... 903 904 905 906 907 908 909
                                strcat(str_res, str0_9[n]);
                            else
                                if (n>=10 && n<=19)         // 110 111 112 113 114 115 116 117 118 119 | 210 211 ... 219 | ... 991 992 993 994 995 996 997 998 999
                                    strcat(str_res, str10_19[n%10]);
                                else
                                    if (n>=20 && n<=90 && n%10==0)  // 120 130 140 150 160 ... 920 930 940 950 960 970 980 990
                                        strcat(str_res, str20_90[n/10-2]);
                                    else
                                        if (n>=21 && n<=99)         // 121 122 123 .. 129 | 221 222 223 .. 229 | 921 922 923 924 925 926 927 928 929
                                        {
                                            strcat(str_res, str20_90[n/10-2]);
                                            strcat(str_res, " ");
                                            strcat(str_res, str0_9[n%10]);
                                        }
                        }
 
    
 
    cout << str_res << endl;
    
 
    system("pause");
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.11.2012, 15:21     Представить любое целое число словесной записью
Посмотрите здесь:

C++ Составить функцию, которая, получив любое целое число, преобразует его, поменяв в нем первую и последнюю цифр
C++ Представить целое число N в виде суммы M примерно равных целых чисел.
Дано целое число m. получить найбольщее целое k при котором 4^k<m C++
Дано целое число N (> 0). Найти сумму N2 + (N + 1)2+ (N + 2)2+ … + (2*N)2 (целое число) C++
C++ Разработать функцию, которая формирует стринг, что является словесной записью заданного числа
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
I.M.
 Аватар для I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
11.11.2012, 16:36     Представить любое целое число словесной записью #2
А вы классами пользоваться умеете? Просто могу подсказать, но мой вариант будет содержать классы. Или структуры, например.
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
11.11.2012, 16:46     Представить любое целое число словесной записью #3
решалась подобная задача Вывести число прописью
Есть ли функция перевода числа в его прописное значение?
v.a.l.i.d
 Аватар для v.a.l.i.d
412 / 377 / 10
Регистрация: 21.09.2012
Сообщений: 913
11.11.2012, 17:44  [ТС]     Представить любое целое число словесной записью #4
David Sylva, Да, я уже смотрел ту страницу. У форумчанина Day не могу понять сам алгоритм. У него сделано через рекурсивную функцию. А я в них плохо разбираюсь. Да и в чужой программе тоже не могу понять
I.M., Можете просто алгоритм написать, без программы. Лишь бы сам смысл понять. А там я попробую написать программу

Добавлено через 6 минут
В другой ссылке у zitxbit тоже все сложно. Там какая то функция memset(). Только я не знаю что она делает
David Sylva
 Аватар для David Sylva
1280 / 942 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
11.11.2012, 19:07     Представить любое целое число словесной записью #5
посмотри про memset http://www.cplusplus.com/reference/c...string/memset/
http://en.cppreference.com/w/cpp/string/byte/memset
Yandex
Объявления
11.11.2012, 19:07     Представить любое целое число словесной записью
Ответ Создать тему
Опции темы

Текущее время: 21:04. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru