Convertir a romanos


/*roman_cy.cpp*/

#include<stdio.h>
#include<conio.h>
#include<math.h>
#include<ctype.h>

int        r   =0,c    =0,j   =0,i   =0,acum=0,
 mil =0,quini=0,cien=0,cinq=0,diez=0,
 cinc=0,uno  =0,s;
unsigned char     cad[9000],op;
long      num=0;


void romano(long n);
void anular();
void main()
{
do
{
i=0;
j=0;

anular();
textbackground(1);
textcolor(WHITE);
clrscr();
textcolor(15);
textbackground(0);
_setcursortype(2);
gotoxy(1,1);cprintf("                                   Make in Borland C++ 3.0  Model Compiler Small");
gotoxy(1,2);cprintf("ROMAN NUMBERS CALCULATOR                                 ");
gotoxy(3,14);printf("Ingrese un n£mero cualquiera, debe ser entero puesto que");
gotoxy(3,15);printf("la numeraci¢n decimal en ROMANOS no existe: ");
scanf("%ld",&num);

romano(num);
_setcursortype(0);
textbackground(0);
textcolor(15);
gotoxy(1,50);cprintf(" Para efectuar otro c lculo presione S, para salir N       ");
op=tolower(getche());
}
while (op!='n');
}//end of main

//***************************************************************************


void anular()
{
for(j=0;j<=9000;j++)/*initializing the vector with NULL characters*/
  {
   cad[j]=NULL;//deleting any garbage at memory
  }
}



void romano(long n)
{

if (n<0)
{
s=1;          //bander to activate the sign validation
n=abs(n);    //converts to number without sign
}
else if (n>0)
{
s=0;
}

if (n<=15)  n=n;
else
if (n>15)   n++;

anular();

for(r=1;r<=n;r++)
{

acum=r;
i=0;
while (acum>0)
{
  mil  =(acum/1000);mil  *=1000 ;acum-=mil  ;
  quini=(acum/500) ;quini*=500  ;acum-=quini;
  cien =(acum/100) ;cien *=100  ;acum-=cien ;
  cinq =(acum/50)  ;cinq *=50   ;acum-=cinq ;
  diez =(acum/10)  ;diez *=10   ;acum-=diez ;
  cinc =(acum/5)   ;cinc *=5    ;acum-=cinc ;
  uno  =(acum/1)   ;uno  *=1    ;acum-=uno  ;
}

acum=0;
anular();

while (mil>0)     /*store at the vector the thousands*/
{
cad[i]='M';               i++ ;acum+=1000;
mil=mil-1000;
}

while (acum<r)  /*store the rest numbers*/
{
if((quini==500)&&(cien==400))
  {cad[i]='C';cad[i+1]='M';   i+=2;acum+=900;}
if((quini==500)&&(cien!=400))
  {cad[i]='D';               i++ ;acum+=500;}
if((cien==400)&&(!quini))
  {cad[i]='C';cad[i+1]='D'; i+=2;acum+=400;}
if(cien==300)
  {cad[i]='C';cad[i+1]='C';cad[i+2]='C'; i+=3;acum+=300;}
if(cien==200)
  {cad[i]='C';cad[i+1]='C';              i+=2;acum+=200;}
if(cien==100)
  {cad[i]='C';                           i++ ;acum+=100;}
if((diez==40)&&(cinq==50))
  {cad[i]='X';cad[i+1]='C';              i+=2;acum+=90;}
if((cinq==50)&&(diez!=40))
  {cad[i]='L';         i++;acum+=50;}
if((diez==40)&&(cinq!=50))
  {cad[i]='X';cad[i+1]='L';              i+=2;acum+=40;}
if(diez==30)
  {cad[i]='X';cad[i+1]='X';cad[i+2]='X'; i+=3;acum+=30;}
if(diez==20)
  {cad[i]='X';cad[i+1]='X';              i+=2;acum+=20;}
if(diez==10)
  {cad[i]='X';                           i++;acum+=10;}
if((cinc==5)&&(uno==4))
  {cad[i]='I';cad[i+1]='X';              i+=2;acum+=9;}
if((cinc)&&(uno!=4))
  {cad[i]='V';                           i++;acum+=5;}
if((uno==4)&&(cinc!=5))
  {cad[i]='I';cad[i+1]='V'              ;i+=2;acum+=4;}
if(uno==3)
  {cad[i]='I';cad[i+1]='I';cad[i+2]='I'; i+=3;acum+=3;}
if(uno==2)
  {cad[i]='I';cad[i+1]='I';              i+=2;acum+=2;}
if(uno==1)
  {cad[i]='I'                          ; i++;acum+=1;}
}

c=i;

printf("\n\n");
textcolor(YELLOW);
textbackground(BLUE);


if (s==0)    //case in that is positive
{
for(j=0;j<c;j++)
  {
   cprintf("%c",cad[j]);
  }
}

else


if (s==1) //case in that is negative
{
cprintf("-");
for(j=0;j<c;j++)
   {
    cprintf("%c",cad[j]);
   }
}
c=0;
i=0;

}
}//end function

Descarga

No response to “Convertir a romanos”