Перевести число из римских цифр в арабские - C#
Формулировка задачи:
Здравствуйте! Помогите пожалуйста написать программу, которая переводит число из римских цифр в арабские. Например M-1000,D-500,C-100,L-50,X-10,V-5,I-1(MDXVI-1516). То-есть надо их складывать, в C# не очень разбераюсь. Спасибо!
Второй вариант
Если поможет код на C++, только там сложнее перевод из арабских в римские цифры.
#include <stdio.h>
#include <stdlib.h>
#define NUMS 13
[COLOR=Blue]char* to_roman( unsigned int num, char* buff )
{
int p = NUMS;
unsigned int a_num[NUMS] = {1,4,5,9,10,40,50,90,100,400,500,900,1000};
char* r_str[NUMS] = {"I","IV","V","IX","X","XL","L","XC","C","CD","D","CM","M"};
*buff = '\0';
while (p--)
while (num >= a_num[p])
{
num -= a_num[p];
strcat( buff, r_str[p] );
}
return buff;
}[/COLOR]
int main( void )
{
char* roman;
unsigned int arabian = 3451;
roman = (char*)malloc(256);
printf( "%i: %s\n", arabian, to_roman( arabian, roman ));
free( roman );
return 0;
}#include <stdio.h>
#include <conio.h>
#include <string.h>
char *a2roman (int value, char *c1, char *c2, char *c3);
int main (void)
{
int arabicalNumeral = 1;
int result;
char roman[15] = "";
do
{
clrscr();
textcolor(GREEN);
cprintf("..::Programma dlya preobrazovaniyz arabskih chisel v rimskie::..");
cprintf("\n\r================================================================");
textcolor(RED);
cprintf("\n\n\rVvedite chislo ot 1 do 3000: ");
scanf ("%d", &arabicalNumeral);
}
while ((arabicalNumeral < 1) || (arabicalNumeral > 3000));
if ((arabicalNumeral <= 3000) && (arabicalNumeral >= 1000))
{
result = arabicalNumeral / 1000;
strcat (roman, a2roman(result, "M", " ", " "));
arabicalNumeral -= (result * 1000);
}
if ((arabicalNumeral < 1000) && (arabicalNumeral >= 100))
{
result = arabicalNumeral / 100;
strcat (roman, a2roman(result, "C", "D", "M"));
arabicalNumeral -= (result * 100);
}
if ((arabicalNumeral < 100) && (arabicalNumeral >= 10))
{
result = arabicalNumeral / 10;
strcat (roman, a2roman(result, "X", "L", "C"));
arabicalNumeral -= (result * 10);
}
if ((arabicalNumeral < 10) && (arabicalNumeral >= 1))
{
strcat (roman, a2roman(arabicalNumeral, "I", "V", "X"));
}
textcolor(LIGHTBLUE);
cprintf("Eto chiclo v rimskom napisanii: %s\n\n", roman);
textcolor(YELLOW);
cprintf("\n\r ...Press any key to exit... ");
getch();
return 0;
}Решение задачи: «Перевести число из римских цифр в арабские»
textual
Листинг программы
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace rim
{
class Program
{
static void Main(string[] args)
{
Console.WriteLine("Введите римскую цифру в эквиваленте от 1 до 3999,\nиспользуя символы 'I','V','X','L','C','D','M':");
Console.WriteLine();
while (true)
{
string rim = Console.ReadLine();
int summa = 0;
for (int i = 0; i < rim.Length; i++)
{
if (i < rim.Length - 1 && rim[i] == 'I' && rim[i + 1] != 'I') continue;
else if (rim[i] == 'I')
summa += 1;
else if (rim[i] == 'V')
{
if (i > 0 && rim[i - 1] == 'I') summa += 4;
else summa += 5;
}
else if (rim[i] == 'X')
{
if (i > 0 && rim[i - 1] == 'I') summa += 9;
else if (i < rim.Length - 1 && (rim[i + 1] == 'L' || rim[i + 1] == 'C')) continue;
else summa += 10;
}
else if (rim[i] == 'L')
{
if (i > 0 && rim[i - 1] == 'X') summa += 40;
else summa += 50;
}
else if (rim[i] == 'C')
{
if (i > 0 && rim[i - 1] == 'X') summa += 90;
else if (i < rim.Length - 1 && (rim[i + 1] == 'D' || rim[i + 1] == 'M')) continue;
else summa += 100;
}
else if (rim[i] == 'D')
{
if (i > 0 && rim[i - 1] == 'C') summa += 400;
else summa += 500;
}
else if (rim[i] == 'M')
{
if (i > 0 && rim[i - 1] == 'C') summa += 900;
else summa += 1000;
}
}
Console.WriteLine(summa);
Console.WriteLine("*****");
}
}
}
}