// Перевод с римского числа в арабское в пределах от 1 до 3999 включительно
#include <iostream>
#include <string>
#include <vector>
#include <algorithm>
using namespace std;
vector<string> suite() {
const static string roman[][10U] = {
{ ""s, "I"s, "II"s, "III"s, "IV"s, "V"s, "VI"s, "VII"s, "VIII"s, "IX"s },
{ ""s, "X"s, "XX"s, "XXX"s, "XL"s, "L"s, "LX"s, "LXX"s, "LXXX"s, "XC"s },
{ ""s, "C"s, "CC"s, "CCC"s, "CD"s, "D"s, "DC"s, "DCC"s, "DCCC"s, "CM"s },
{ ""s, "M"s, "MM"s, "MMM"s }
};
vector<string> box;
for (auto i = 0U; i < 3999U; ++i) {
string str;
if (i / 1000) str += roman[3][i / 1000 % 10];
if (i / 100) str += roman[2][i / 100 % 10];
if (i / 10) str += roman[1][i / 10 % 10];
if (i) str += roman[0][i % 10];
box.push_back(str);
}
return box;
}
unsigned arabic(string roman) {
const static vector<string> box = suite();
transform(roman.begin(), roman.end(), roman.begin(), ::toupper);
auto pos = find(box.begin(), box.end(), roman);
if (pos == box.end()) return 0;
return pos - box.begin();
}
int main() {
string roman;
unsigned number;
do {
cout << "Roman: ";
cin >> roman;
number = arabic(roman);
cout << "Arabic: " << number << '\n';
} while (number);
puts("End!");
system("pause > nul");
}
C/C++
Программа для перевода римских чисел в арабские С++
#include "iostream"
int main () {
setlocale( LC_ALL,"Russian" );
char numb_rome[30] = "";
int numb_arab = 0;
std::cout<<"Введите римское число : ";
std::cin.getline(numb_rome, 30);
for (int i=0; i<30; i++)
switch (numb_rome[i]) {
case 'M': case 'm' : numb_arab+=1000; break;
case 'D': case 'd' : numb_arab+=500; break;
case 'C': case 'c' : numb_arab+=100; break;
case 'L': case 'l' : numb_arab+=50; break;
case 'X': case 'x' : numb_arab+=10; break;
case 'V': case 'v' : numb_arab+=5; break;
case 'I': case 'i' : numb_arab++; break;
}
std::cout<<"Арабское число : "<<numb_arab;
}
P.S. Единственный случай, когда прога будет неправильно считать, это когда перед большим числом стоит меньшее, она будет их тупо складывать, хотя надо из большего вычитать меньшее. Например : XC = 90, а моя прога выдаст 110. Мне влом думать как это исправить, но если сильно надо то постараюсь подумать, или может ты сам сможешь её исправить
int main () {
setlocale( LC_ALL,"Russian" );
char numb_rome[30] = "";
int numb_arab = 0;
std::cout<<"Введите римское число : ";
std::cin.getline(numb_rome, 30);
for (int i=0; i<30; i++)
switch (numb_rome[i]) {
case 'M': case 'm' : numb_arab+=1000; break;
case 'D': case 'd' : numb_arab+=500; break;
case 'C': case 'c' : numb_arab+=100; break;
case 'L': case 'l' : numb_arab+=50; break;
case 'X': case 'x' : numb_arab+=10; break;
case 'V': case 'v' : numb_arab+=5; break;
case 'I': case 'i' : numb_arab++; break;
}
std::cout<<"Арабское число : "<<numb_arab;
}
P.S. Единственный случай, когда прога будет неправильно считать, это когда перед большим числом стоит меньшее, она будет их тупо складывать, хотя надо из большего вычитать меньшее. Например : XC = 90, а моя прога выдаст 110. Мне влом думать как это исправить, но если сильно надо то постараюсь подумать, или может ты сам сможешь её исправить
Сёма Махт
А почему компилятор показывает чо прога не верная
Сёма Махт
Спасибо огромное
Сёма Махт
А то нас этому не учили, и хотят чтоб мы это сделали)
Сёма Махт
Извините конечно за наглость а с арабских на римские не поможете
Сёма Махт
2 часа назад
Похожие вопросы
- С++ Максимум трёх чисел Даны три целых числа. Найдите наибольшее из них (программа должна вывести ровно одно целое число
- Программа на C++ с переводом Char в Int и наоборот при переводе возвращает НИЧЕГО
- Написать программу, которая выводит числа из файла с текстом и числами. С++
- Программа делится ли число на 3 6 9 без остатка на с++
- В LINUX OS Написать программу, которая из командной строки получает целое число N и некоторый текст “Text”.
- Помогите пожалуйста написать программу, реализующую десять генераторов псевдослучайных чисел.СИ!!!!
- Написать программу, которая сравнивает число перестановок элементов при использовании сортировки «пузырьком» (усовершенс
- Си. Цикл for. Что не так? Составить программу вывода на экран всех простых чисел не превосходящих введеннного числа N
- Написать программу, возвращающую значение N, если N - простое число
- Помогите пожалуйста с Массивами .В языке С .Заполнил 2-мерный массив N и M случайными числами дальше не понимаю.