Pers.narod.ru. Алгоритмы. Конвертируем римские цифры в арабские |
Алгоритм несложен, если знать значения римских цифр (выводятся программой). Кстати, сейчас идёт год MMIX (2009).
#include <stdio.h> #include <conio.h> #include <string.h> #include <stdlib.h> int is_correct_input(char *str) { while(*str) { if (*str!='I' && *str!='V' && *str!='X' && *str!='L' && *str!='C' && *str!='D' && *str!='M') return 0; str++; } return 1; } int convert(char *str) { int length=0; while(*str) { str++; length++; } int active=0; int next=0; switch (*str) { case 'I' : {active=1;break;} case 'V' : {active=5;break;} case 'X' : {active=10;break;} case 'L' : {active=50;break;} case 'C' : {active=100;break;} case 'D' : {active=500;break;} case 'M' : {active=1000;break;} default : break; } int result=active; while (length>0) { switch (*(str-1)) { case 'I' : {next=1;break;} case 'V' : {next=5;break;} case 'X' : {next=10;break;} case 'L' : {next=50;break;} case 'C' : {next=100;break;} case 'D' : {next=500;break;} case 'M' : {next=1000;break;} default : break; } if (next<active) result-=next; else result+=next; length--; str--; active=next; } return result; } void main() { clrscr(); char input_str[20]; printf("This program converts numbers from Rome to Arabian form.\n"); printf("Some Rome digits:\n"); printf("\nI - 1\nV - 5\nX - 10\nL - 50\nC - 100\nD - 500\nM - 1000\n"); printf("\nPut CAPS LOCK status ON and enter a Rome number :\n"); window(1,13,80,18); do { clrscr(); scanf("%s",&input_str[0]); if (is_correct_input(&input_str[0])) { printf("%s - %d",input_str,convert(&input_str[0])); } else { printf("\nIncorrect input."); break; } printf("\nWant to convert once more(Y/N)?"); } while(getche()!=(int)'N'); printf("\nPress any key to exit..."); getch(); }
гостевая; E-mail |