Перевести число из римских цифр в арабские - 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("*****"); } } } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д