/* Program: RoAr */ /* (c) 1986 by ZarSoft */ main () { char op; do { printf("\n R-calcular romano"); printf("\n A-calcular arabe"); printf("\n F-fim"); printf("\n"); printf("\n"); gets(&op); switch (op) { case 'R':romano(); break; case 'A':arabe(); break; case 'F':break; default:printf("\n *error"); }; } while (op != 'F'); } /*---------------------------------------------------------*/ arabe() {char ant=' ',act; int r=0; printf("\n romano = "); act=getchar(); while (val(act) > 0) {r=r+val(act); if (val(ant) < val(act)) r=r-2*val(ant); ant=act; act=getchar(); }; printf("\n em arabe = %d",r); } /*----------------------*/ int val (c) char c; { switch (c) { case 'M':return(1000); case 'D':return(500); case 'C':return(100); case 'L':return(50); case 'X':return(10); case 'V':return(5); case 'I':return(1); case ' ':return(0); default :printf("\n *error"); return(0); }; } /*------------------------------------------------------------*/ romano () {int romano[] = {0,1,11,111,21,2,12,112,1112,31}; char simbolo[] = {' ','I','V','X','L','C','D','M'}; int decimal,inverso,codigo_romano,i; printf("\n arabe = "); scanf("%d",&decimal); inverso=0; for (i=1;i<=4;i++) {inverso=10*inverso+decimal%10; decimal=(int)decimal/10; }; for (i=7;i>=1;i-=2) {int digito; digito=inverso%10; codigo_romano=romano[digito]; inverso=(int)inverso/10; for (j=1;j<=4;j++) {if ((int)codigo_romano%10) printf("%c",simbolo[(int)codigo_romano%10+i-1]); codigo_romano=(int)codigo_romano/10; }; }; printf("\n"); } /*-------------------------------------------------------------------*/