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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Slowpok
4 / 4 / 0
Регистрация: 03.01.2012
Сообщений: 112
#1

Записать число русскими словами - C++

03.11.2013, 21:05. Просмотров 979. Ответов 5
Метки нет (Все метки)

Добрый день! Вот условие:
Дано натуральное число n≤1000. Записать русскими словами (семнадцать, три, тысяча и т. д.).

есть код на Паскале, а вот переделать его в с++ не получается:
Pascal
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
uses crt;
var st:string;
    n:integer;
begin
repeat
write('n = ');
readln(n);
until (n>0)and(n<=1000);
case n of
1000:st:='одна тысяча';
else
 begin
  st:='';
  case n div 100 of
  1:st:='сто';
  2:st:='двести';
  3:st:='триста';
  4:st:='четыреста';
  5:st:='пятьсот';
  6:st:='шестьсот';
  7:st:='семьсот';
  8:st:='восемьсот';
  9:st:='девятьсот';
  end;
  case n mod 100 div 10 of
  2:st:=st+' двадцать';
  3:st:=st+' тридцать';
  4:st:=st+' сорок';
  5:st:=st+' пятьдесят';
  6:st:=st+' шестьдесят';
  7:st:=st+' семьдесят';
  8:st:=st+' восемьдесят';
  9:st:=st+' девяносто';
  end;
  case n mod 100 of
  10:st:=st+' десять';
  11:st:=st+' одиннадцать';
  12:st:=st+' двенадцать';
  13:st:=st+' тринадцать';
  14:st:=st+' четырнадцать';
  15:st:=st+' пятнадцать';
  16:st:=st+' шестнадцать';
  17:st:=st+' семнадцать';
  18:st:=st+' восемнадцать';
  19:st:=st+' девятнадцать';
  else
   case n mod 10 of
   1:st:=st+' один';
   2:st:=st+' два';
   3:st:=st+' три';
   4:st:=st+' четыре';
   5:st:=st+' пять';
   6:st:=st+' шесть';
   7:st:=st+' семь';
   8:st:=st+' восемь';
   9:st:=st+' девять';
   end;
  end;
 end;
end;
writeln(st);
readln;
end.
Как я понял, в с++ нельзя так к строке прибавить кусок текста, да и с алгоритмом у меня туго, не получается оперировать остатками. Помогите, пожалуйста, разобраться!
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.11.2013, 21:05     Записать число русскими словами
Посмотрите здесь:

Как записать число в строку? C++
C++ 10-тичное число словами на русском языке в 8-ми и 10-ной системах
Записать число словами C++
C++ Записать введённую с клавиатуры цифру от 0 до 10 словами на английском языке
Записать введённую с клавиатуры цифру от 0 до 10 словами на английском языке C++
C++ Записать число в файл
C++ Имена переменных русскими словами
Как записать число в строку? C++
Напечатать число русскими словами C++
C++ Напечатать данное натуральное число русскими словами
C++ Вывести словами введенное число
как записать число со сепенью в c++ C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
03.11.2013, 21:07     Записать число русскими словами #2
эм...с++? вы уверены что вы там где должны быть?))
Slowpok
4 / 4 / 0
Регистрация: 03.01.2012
Сообщений: 112
03.11.2013, 21:11  [ТС]     Записать число русскими словами #3
Цитата Сообщение от dzrkot Посмотреть сообщение
эм...с++? вы уверены что вы там где должны быть?))
но ведь я просто привел пример реализации данной программы в Паскале. думаю в разделе Паскаля мне вряд ли помогут перевести на с++)
dzrkot
zzzZZZ...
518 / 348 / 53
Регистрация: 11.09.2013
Сообщений: 1,995
03.11.2013, 21:48     Записать число русскими словами #4
Цитата Сообщение от Slowpok Посмотреть сообщение
но ведь я просто привел пример реализации данной программы в Паскале. думаю в разделе Паскаля мне вряд ли помогут перевести на с++)
пардон, что-то я сегодня не дочитывае некоторые комментарии к заданиям и делаю выводы...
сейчас напишу вам эту шляпу

Добавлено через 18 минут
надеюсь сам допишешь

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
70
71
72
73
74
75
76
#include <iostream>
#include <cstdlib>
#include <ctime>
#include <cmath>
using namespace std;
int main()
{
    int value;
    string _100;
srand(time(0));
value=0+rand()%999;
cout<<value<<endl;
 
    switch (value/100)
    {
    case 9:
    _100="devatsot";
    cout<<_100;
    break;
     case 8:
    _100="vosemsot";
    cout<<_100;
    break;
        case 7:
    _100="semsot";
    cout<<_100;
    break;
        case 6:
    _100="westsot";
    cout<<_100;
    break;
        case 5:
    _100="p9tsot";
    cout<<_100;
    break;
        case 4:
    _100="4etiresta ";
    cout<<_100;
    break;
    }
    cout<<" ";
    switch ((value%100)/10)
    {
    case 9:
    _100="dev9nosto";
    cout<<_100;
    break;
     case 8:
    _100="vosemdes9t";
    cout<<_100;
    break;
        case 7:
    _100="semdes9t";
    cout<<_100;
    break;
        case 6:
    _100="westdes9t";
    cout<<_100;
    break;
        case 5:
    _100="p9tdes9t";
    cout<<_100;
    break;
        case 4:
    _100="sorok";
    cout<<_100;
    break;
    }
 
    switch (value%10)
    {
    case 9:
    break;
    }
return 0;
}
Slowpok
4 / 4 / 0
Регистрация: 03.01.2012
Сообщений: 112
03.11.2013, 21:51  [ТС]     Записать число русскими словами #5
dzrkot, конечно, спасибо огромное!)
Simak63
29 / 29 / 9
Регистрация: 19.02.2011
Сообщений: 136
03.11.2013, 21:51     Записать число русскими словами #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
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
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
#include <iostream>
#include <conio.h>
#include <string>
#include <Windows.h>
 
std::string towords(int numb);
 
int main()
{
    SetConsoleCP(1251);
    SetConsoleOutputCP(1251);
    int numb=100500;
    std::string str=towords(numb);
    std::cout<<numb<<" = "<<str;
    
    system("PAUSE");
    return EXIT_SUCCESS;
}
 
std::string towords(int numb){
    //массив, для определения разряда, в котором находимся(сотни,десятки,еденицы...)
    int osn[11]={0,1,10,100,1000,10000,100000,1000000,10000000,100000000,1000000000};
 
    //массив оснований
    std::string basis[11][10]={
        {"","","","","","","","","",""},
        {"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
        {"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
        {"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
        {"","одна","две","три","четыре","пять","шесть","семь","восемь","девять"},
        {"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
        {"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
        {"","один","два","три","четыре","пять","шесть","семь","восемь","девять"},
        {"","десять","двадцать","тридцать","сорок","пятьдесят","шестьдесят","семьдесят","восемьдесят","девяносто"},
        {"","сто","двести","триста","четыреста","пятьсот","шестьсот","семьсот","восемьсот","девятьсот"},
        {"","один","два","три ","четыре","пять","шесть","семь","восемь","девять"}};
 
    //массив окончаний
    std::string termination[10][10]={
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяча","","","миллион","","","миллиард"},
        {"","","","тысячи","","","миллиона","","","миллиарда"},
        {"","","","тысячи","","","миллиона","","","миллиарда"},
        {"","","","тысячи","","","миллиона","","","миллиарда"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"},
        {"","","","тысяч","","","миллионов","","","миллиардов"}};
 
    std::string dec[10]={"десять","одиннадцать","двенадцать","тринадцать","четырнадцать","пятнадцать","шестнадцать","семнадцать","восемнадцать","девятнадцать"};
    std::string result;
 
    if (!numb){
        result="ноль";
        return result;
    }
    int n1=numb;
    int cnt=0;
 
    //подсчет количесива цифр в числе
    while (numb){
        numb/=10;
        ++cnt;
    }
    int celoe=0;
 
    //перевод
    while (n1){
        if (!((cnt+1) % 3)){
            if ((n1/osn[cnt])==1){
                    n1%=osn[cnt];
                    --cnt;
                    celoe=n1/osn[cnt];
                    n1%=osn[cnt];
                    result+=dec[celoe];
                --cnt;
                if (!(cnt % 3))
                    result+=" "+termination[0][cnt]+" ";
            }
            if (!cnt) break;
        }
        celoe=n1/osn[cnt];
        n1%=osn[cnt];
        result+=basis[cnt][celoe]+" ";
        --cnt;
        if (!(cnt % 3))
            result+=termination[celoe][cnt]+" ";
    }
 
    return result;
}
Yandex
Объявления
03.11.2013, 21:51     Записать число русскими словами
Ответ Создать тему
Опции темы

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