Код: Выделить всё
#include <string.h>
#include <stdio.h>
#include <stdlib.h>
#include<conio.h>
#include<string.h>
#include<stdio.h>
#include<string.h>
#include<conio.h>
#include<iostream.h>
#include<iomanip.h>
#include<string.h>
#include<ctype.h>
const int arabar[] = { 1, 4, 5, 9, 10, 40, 50, 90, 100, 400, 500, 900, 1000};
const char *romanar[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
class calculator
{
public:
int arab();
char * rom();
friend char *arab2roman(unsigned short int arab);
friend unsigned short int roman2arab(char * roman);
friend char * summa(char * roman,char *oi);
friend char* proizved(char * roman,char *oi);
friend char * zeloe_del(char * roman,char *oi);
friend char* ostatok(char * roman,char *oi);
private:
int a;
char * b;
};
int calculator::arab()
{
cout<<"Vvedite arabskoe chislo:";
cin>>a;
return a;
};
char * calculator::rom()
{cout<<"Vvedite rimskoe chislo:";
cin>>b;
return b;
};
char *arab2roman(unsigned short int arab) {
static char roman[80];
const int m = sizeof(arabar)/sizeof(int)-1, arabmax=arabar[m];
const char romanmax=romanar[m][0];
int i, n;
if(!arab) { char *l;
l="O";
return l;
}
i=0;
while(arab>arabmax) {
roman[i++] = romanmax;
arab -= arabmax;
}
n=m;
while(arab > 0) {
if(arab >= arabar[n]) {
roman[i++] = romanar[n][0];
if(n&1)
roman[i++] = romanar[n][1];
arab -= arabar[n];
} else
n--;
}
roman[i]=0;
return roman;
}
unsigned short int roman2arab(char* roman) {
const int m = sizeof(arabar)/sizeof(int)-1;
unsigned short int arab;
int len, n, i, pir;
len=strlen(roman);
arab=0;
n=m;
i=0;
while(n >= 0 && i < len) {
pir=n&1;
if((roman[i]&0xdf) == romanar[n][0] && (!pir || (roman[i+1]&0xdf) == romanar[n][1])) {
arab += arabar[n];
i += 1+pir;
} else
n--;
}
return arab;
}
char * summa(char * roman,char *oi)
{
int c;
c=roman2arab(roman)+roman2arab(oi);
return arab2roman(c);
}
char * proizved(char * roman,char *oi)
{
int c;
c=roman2arab(roman)*roman2arab(oi);
return arab2roman(c);
}
char * zeloe_del(char * roman,char *oi)
{
int c; char*b="Delenie na 0";
if(roman2arab(oi)!=0)
{c=roman2arab(roman)/roman2arab(oi);
return arab2roman(c);
}
else
return b;
}
char * ostatok(char * roman,char *oi)
{
int c; char *b="Delenie na 0!!!";
if(roman2arab(oi)!=0)
{c=roman2arab(roman)%roman2arab(oi);
return arab2roman(c);
}
else
return b;
}
main()
{clrscr();
char* m,*n;
calculator p,c;
int v,o,b;
m=p.rom();
n=c.rom();
cout<<"\n"<<ostatok(n,m);
getch();
getch();
}