
Вопрос задан 27.05.2019 в 08:36.
Предмет Информатика.
Спрашивает Погонец Анна.
Задание.Для записи римскими цифрами используются символы I, V, X, L, С, D, М, обозначающие
соответственно числа 1, 5, 10, 50, 100, 500, 1000. Составить программу, которая запись любого данного числа п (п ≤ 3999) арабскими цифрами переводила бы в запись римскими цифрам. На С++. string RomeZifr[13] = { "I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M" }; int ArabZifr[13] = { 1,4,5,9,10,40,50,90,100,400,500,900,1000 }; int ara,i=13;//iдля цикла string S=" ";//s=для вывода числа на роме cout << "Ведите число<=3999"; cin >> ara; while (ara > 0) { while (ArabZifr[i] > ara) i -= 1;//уменьшаем S = S + RomeZifr[i]; ara -= ArabZifr[i]; } cout << "Число=" << S; Может можно по другому?У меня она не работает.

Ответы на вопрос

Отвечает Соколовский Артур.
#include <iostream>
#include <string>
using namespace std;
string solve(int num, int divd)
{
string result = "";
int count = 0;
while(num)
{
count = num / divd;
if(count)
{
num %= divd;
for (int i = 0; i < count; i++)
switch(divd)
{
case 1000:
{
result+="M";
break;
}
case 900:
{
result+="CM";
break;
}
case 800:
{
result+="DCC";
break;
}
case 700:
{
result+="DCC";
break;
}
case 600:
{
result+="DC";
break;
}
case 500:
{
result+="D";
break;
}
case 400:
{
result+="CD";
break;
}
case 300:
{
result+="CCC";
break;
}
case 200:
{
result+="CC";
break;
}
case 100:
{
result+="C";
break;
}
case 90:
{
result+="XC";
break;
}
case 80:
{
result+="LXXX";
break;
}
case 70:
{
result+="LXX";
break;
}
case 60:
{
result+="LX";
break;
}
case 50:
{
result+="L";
break;
}
case 40:
{
result+="XL";
break;
}
case 30:
{
result+="XXX";
break;
}
case 20:
{
result+="XX";
break;
}
case 10:
{
result+="X";
break;
}
case 9:
{
result+="IX";
break;
}
case 8:
{
result+="VIII";
break;
}
case 7:
{
result+="VII";
break;
}
case 6:
{
result+="VI";
break;
}
case 5:
{
result+="V";
break;
}
case 4:
{
result+="IV";
break;
}
case 3:
{
result+="III";
break;
}
case 2:
{
result+="II";
break;
}
case 1:
{
result+="I";
break;
}
}
}
if(divd <= 1000 && divd > 100) divd-=100;
else if(divd <= 100 && divd > 10) divd-=10;
else divd-=1;
}
return result;
}
int main()
{
int num,count;
cin >> num;
if(num <= 3999) cout << solve(num,1000);
else cout << "Incorrect input.";
return 0;
}
#include <string>
using namespace std;
string solve(int num, int divd)
{
string result = "";
int count = 0;
while(num)
{
count = num / divd;
if(count)
{
num %= divd;
for (int i = 0; i < count; i++)
switch(divd)
{
case 1000:
{
result+="M";
break;
}
case 900:
{
result+="CM";
break;
}
case 800:
{
result+="DCC";
break;
}
case 700:
{
result+="DCC";
break;
}
case 600:
{
result+="DC";
break;
}
case 500:
{
result+="D";
break;
}
case 400:
{
result+="CD";
break;
}
case 300:
{
result+="CCC";
break;
}
case 200:
{
result+="CC";
break;
}
case 100:
{
result+="C";
break;
}
case 90:
{
result+="XC";
break;
}
case 80:
{
result+="LXXX";
break;
}
case 70:
{
result+="LXX";
break;
}
case 60:
{
result+="LX";
break;
}
case 50:
{
result+="L";
break;
}
case 40:
{
result+="XL";
break;
}
case 30:
{
result+="XXX";
break;
}
case 20:
{
result+="XX";
break;
}
case 10:
{
result+="X";
break;
}
case 9:
{
result+="IX";
break;
}
case 8:
{
result+="VIII";
break;
}
case 7:
{
result+="VII";
break;
}
case 6:
{
result+="VI";
break;
}
case 5:
{
result+="V";
break;
}
case 4:
{
result+="IV";
break;
}
case 3:
{
result+="III";
break;
}
case 2:
{
result+="II";
break;
}
case 1:
{
result+="I";
break;
}
}
}
if(divd <= 1000 && divd > 100) divd-=100;
else if(divd <= 100 && divd > 10) divd-=10;
else divd-=1;
}
return result;
}
int main()
{
int num,count;
cin >> num;
if(num <= 3999) cout << solve(num,1000);
else cout << "Incorrect input.";
return 0;
}



Отвечает Косов Миша.
#include<iostream> #include<string> using std::string; string func(int num, string, string, string); int main(int argc, char argv[]) { system("chcp 1251>0"); std::cout << "Введите число не большее 3999: "; int arabien_num; if (!(std::cin >> arabien_num) || (arabien_num > 3999)) { std::cerr << "Невозможно инициализировать число!" << std::endl; exit(1); } std::string rome_num; rome_num += func(arabien_num / 1000, "", "", "M"); arabien_num %= 1000; rome_num += func(arabien_num / 100, "M", "D", "C"); arabien_num %= 100; rome_num += func(arabien_num / 10, "C", "L", "X"); arabien_num %= 10; rome_num += func(arabien_num , "X", "V", "I"); std::cout << rome_num << std::endl; return 0; } string func(int num, string hi, string re, string lo) { switch(num) { case 9: return lo + hi; case 8: return re + lo + lo + lo; case 7: return re + lo + lo; case 6: return re + lo; case 5: return re; case 4: return lo + re; case 3: return lo + lo + lo; case 2: return lo + lo; case 1: return lo; case 0: return ""; } }


Топ вопросов за вчера в категории Информатика

Информатика 566

Информатика 25

Информатика 22

Информатика 27

Информатика 34

Информатика 58

Информатика 63

Информатика 23
Последние заданные вопросы в категории Информатика
Предметы
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili