C/C++

Программа для перевода римских чисел в арабские С++

Сёма Махт
Сёма Махт
768
// Перевод с римского числа в арабское в пределах от 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");
}
СЛ
Светлана Логачева
51 294
Лучший ответ
#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. Мне влом думать как это исправить, но если сильно надо то постараюсь подумать, или может ты сам сможешь её исправить
Сёма Махт А почему компилятор показывает чо прога не верная
Сёма Махт Спасибо огромное
Сёма Махт А то нас этому не учили, и хотят чтоб мы это сделали)
Сёма Махт Извините конечно за наглость а с арабских на римские не поможете
Сёма Махт 2 часа назад

Похожие вопросы