Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
1 / 1 / 0
Регистрация: 22.10.2021
Сообщений: 176

Задача на римскую систему счисления

22.10.2021, 14:27. Показов 998. Ответов 4

Студворк — интернет-сервис помощи студентам
Всем привет.Я учу С++ только два дня,и мне задали в универе написать код на С++ для перевод десятичного числа в римскую систему.Может кто помочь ?
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
22.10.2021, 14:27
Ответы с готовыми решениями:

задача на римскую систему счисления
Ввести число римскими цифрами (менее 4000 в арабской записи), учитывая следующие обозначения: I - 1, V - 5, X - 10, L - 50, C - 100, D -...

Преобразование в римскую систему счисления
Нужно написать функцию для преобразования целого десятичного числа (от 1 до 3999) в римскую систему исчисления. ВАЖНО! Нельзя...

Перевод чисел в римскую систему счисления
Здравствуйте! Помогите, пожалуйста, с решением задачи. С клавиатуры вводится число от 0 до 100. Программа должна вывести это же число...

4
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6245 / 2957 / 1048
Регистрация: 01.06.2021
Сообщений: 10,986
22.10.2021, 14:34
Лучший ответ Сообщение было отмечено Royal_X как решение

Решение

в инете полно готовых реализаций. Например, вот

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
#include <iostream>
  
using namespace std; 
 
    string integer_to_Roman(int n) {
 
        string str_romans[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
 
        string result = "";
 
        for (int i = 0; i < 13; ++i)
        {
            while(n - values[i] >= 0)
            {
                result += str_romans[i];
                n -= values[i];
            }
        }
 
        return result;
    }
 
  
int main()  
{  
    int n = 7;
    cout << "Integer " << n << " : Roman " << integer_to_Roman(7) << endl;
    n = 19;
    cout << "Integer " << n << " : Roman " << integer_to_Roman(19) << endl;
    n = 789;
    cout << "Integer " << n << " : Roman " << integer_to_Roman(789) << endl;
    n = 1099;
    cout << "Integer " << n << " : Roman " << integer_to_Roman(1099) << endl;
    n = 23456;
    cout << "Integer " << n << " : Roman " << integer_to_Roman(23456) << endl;          
    return 0;  
}
1
1 / 1 / 0
Регистрация: 22.10.2021
Сообщений: 176
22.10.2021, 14:41  [ТС]
Вопрос ещё к вам,как сделать так,что-бы пользователь вводил это число n ?
0
Эксперт CЭксперт С++
 Аватар для liv
5120 / 4574 / 855
Регистрация: 07.10.2015
Сообщений: 9,462
22.10.2021, 14:47
606P1K, могу поделиться своей, когда-то игрался...
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
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
#include <iostream>
#include <string.h>
using namespace std;
 
int Rom2Num(char *rom)
{
    int adding, num = 0;
    for (int i = 0; rom[i]; i++)
    {
        switch (rom[i]) 
        {
            case 'I': 
                adding = 1;
                if (rom[i + 1])
                {
                    if (rom[i + 1] == 'X')
                    {
                        adding = 9;
                        i++;
                    }
                    else if (rom[i + 1] == 'V')
                    {
                        adding = 4;
                        i++;
                    }
                }
                break;
 
            case 'V':
                adding = 5;
                break;
 
            case 'X':
                adding = 10;
                if (rom[i + 1])
                {
                    if (rom[i + 1] == 'C')
                    {
                        adding = 90;
                        i++;
                    }
                    else if (rom[i + 1] == 'L')
                    {
                        adding = 40;
                        i++;
                    }
                }
                break;
 
            case 'L':
                adding = 50;
                break;
 
            case 'C':
                adding = 100;
                if (rom[i + 1])
                {
                    if (rom[i + 1] == 'M')
                    {
                        adding = 900;
                        i++;
                    }
                    else if (rom[i + 1] == 'D')
                    {
                        adding = 400;
                        i++;
                    }
                }
                break;
 
            case 'D':
                adding = 500;
                break;
 
            case 'M':
                adding = 1000;
                break;
 
            default: 
                adding = 0;
        }
        num += adding;
    }
    return num;
}
 
bool Num2Rom(int num, char* sRom)
{
    const char *sRomNums[4][9] = 
    {
        {"I","II","III","IV","V","VI","VII","VIII","IX"},
        {"X","XX","XXX","XL","L","LX","LXX","LXXX","LC"},
        {"C","CC","CCC","CD","D","DC","DCC","DCCC","DM"},
        {"M"}
    };
    int digits[4] = { 0 };
    if (num >= 4000)
        return false;
    *sRom = 0;
    int i;
    for (i = 0; i<4 && num; num /= 10, ++i)
        digits[i] = num % 10;
    if (i > 0)
    {
        for (i = 3; digits[i] == 0; --i);
 
        for (; i >= 0; --i)
            strcat(sRom, sRomNums[i][digits[i]-1]);
    }
    return true;
}
 
int main()
{
 
    int  z, s;
    char a[32], b[32];
 
    cout << "введите 2 числа" << endl;
    cin >> a >> b;
 
    int s1 = Rom2Num(a);
    int s2 = Rom2Num(b);
 
    cout << s1 << "  " << s2 << endl << "что вы хотите сделать" << endl <<
        "1.сложить" << endl <<
        "2.вычесть" << endl <<
        "3.умножить" << endl <<
        "4.делить" << endl;
 
    cin >> z;
    switch (z)
 
    {
        case 1:
            cout << s1 + s2 << endl;
            break;
 
        case 2:
            cout << s1 - s2 << endl;
            break;
 
        case 3:
            cout << s1 * s2 << endl;
            break;
 
        case 4:
            cout << (float)s1 / s2 << endl;
            break;
 
        default:
            cout << "ОШИБКА" << endl;
            return -1;
    }
    
    cout << "Enter num: ";
    cin >> s;
    if (Num2Rom(s, a))
        cout << a << endl;
}
Программка выполняет арифметические действия с римскими числами, делая по ходу дела преобразования в обе стороны...

Добавлено через 1 минуту
Цитата Сообщение от 606P1K Посмотреть сообщение
Вопрос ещё к вам, как сделать так,что-бы пользователь вводил это число n ?
Ну уж это сам-сам... Посмотрите, как сделано у меня...
0
Эксперт функциональных языков программированияЭксперт С++
 Аватар для Royal_X
6245 / 2957 / 1048
Регистрация: 01.06.2021
Сообщений: 10,986
22.10.2021, 14:52
Цитата Сообщение от 606P1K Посмотреть сообщение
Вопрос ещё к вам,как сделать так,что-бы пользователь вводил это число n ?
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
#include <iostream>
  
using namespace std; 
 
    string integer_to_Roman(int n) {
 
        string str_romans[] = {"M", "CM", "D", "CD", "C", "XC", "L", "XL", "X", "IX", "V", "IV", "I"};
        int values[] = {1000, 900, 500, 400, 100, 90, 50, 40, 10, 9, 5, 4, 1};
 
        string result = "";
 
        for (int i = 0; i < 13; ++i)
        {
            while(n - values[i] >= 0)
            {
                result += str_romans[i];
                n -= values[i];
            }
        }
 
        return result;
    }
 
  
int main()  
{  
    int n;
    cout << "n = ";
    cin >> n;
    cout << integer_to_Roman(n);
    return 0;  
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
22.10.2021, 14:52
Помогаю со студенческими работами здесь

Перевод чисел из файла в римскую систему счисления
Во входном файле in.txt заданы целые числа в диапазоне от 1 до 3999, например: 112 24 9 3517 438 56 Вывести те же числа в...

Перевод натурального числа в римскую систему счисления
/* Разработать программу, которая осуществляет перевод введенного натуральго числа в римскую систему счисления и наоборот....

Перевод с арабской на римскую сисстему счисления
Подскажите как сделать перевод с арабских на римские числа по принципу этой программы #include &lt;string.h&gt; #include...

Программа перевод чисел из арабской систеиы счисления в римскую
Перевести заданное целое число в систему римского счисления (1 - I, 5 - V, 10 - X, 50 - L, 100 - C, 500 - D, 1000 - M)

Задача на строки, перевод цифр в римскую систему счисления
С клавиатуры вводятся числа, написать программу переводящую их в римскую систему счисления. Например 2 (II) 7 (VII) и так далее. Второй...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
Вот уже год прошел, как у меня домен в reg.ru ...
Etyuhibosecyu 16.04.2026
И ничего они мне не сделали. Если отвязать карту, никакие услуги они не навяжут. Я бы с радостью продлил еще на два года, чтобы не мучиться с временным доменом и меня уже знали по red-star-soft. com,. . .
Знаешь почему 90% людей редко бывают счастливыми?
kumehtar 14.04.2026
Потому что они ждут. Ждут выходных, ждут отпуска, ждут удачного момента. . . а удачный момент так и не приходит.
Фиксация колонок в отчете СКД
Maks 14.04.2026
Фиксация колонок в СКД отчета типа Таблица. Задача: зафиксировать три левых колонки в отчете. Процедура ПриКомпоновкеРезультата(ДокументРезультат, ДанныеРасшифровки, СтандартнаяОбработка) / / . . .
Настройки VS Code
Loafer 13.04.2026
{ "cmake. configureOnOpen": false, "diffEditor. ignoreTrimWhitespace": true, "editor. guides. bracketPairs": "active", "extensions. ignoreRecommendations": true, . . .
Оптимизация кода на разграничение прав доступа к элементам формы
Maks 13.04.2026
Алгоритм из решения ниже реализован на нетиповом документе, разработанного в конфигурации КА2. Задачи, как таковой, поставлено не было, проделанное ниже исключительно моя инициатива. Было так:. . .
Контроль заполнения и очистка дат в зависимости от значения перечислений
Maks 12.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача: реализовать контроль корректности заполнения дат назначения. . .
Архитектура слоя интернета для сервера-слоя.
Hrethgir 11.04.2026
В продолжение https:/ / www. cyberforum. ru/ blogs/ 223907/ 10860. html Знаешь что я подумал? Раз мы все источники пишем в голове ветки, то ничего не мешает добавить в голову такой источник, который сам. . .
Подстановка значения реквизита справочника в табличную часть документа
Maks 10.04.2026
Алгоритм из решения ниже реализован на примере нетипового документа "ПланированиеПерсонала", разработанного в конфигурации КА2. Задача №1: при указании работ (справочник РаботыПоРемонтуСпецтехники),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru