Перевести число из римских цифр в арабские - 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("*****");
            }
        }
    }
}

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

14   голосов , оценка 3.857 из 5
Похожие ответы