Задание.Для записи римскими цифрами используются символы 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;
Может можно по другому?У меня она не работает.
Ответы
Ответ дал:
1
#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 "";
}
}
Ответ дал:
1
#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;
}
Похожие вопросы
1 год назад
1 год назад
1 год назад
2 года назад
2 года назад
8 лет назад