Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <stdio.h>
- #include <Windows.h>
- using namespace std;
- int Input()
- {
- const char max[11] = "2147483647";
- char str[256];
- int i, neg, p = 1, res = 0;
- bool e = false;
- do {
- if (e) {
- printf("Ошибка. Повторите ввод: ");
- }
- gets_s(str, 256);
- e = false;
- // Проверка на наличие букв в строке
- for (i = 0; i < strlen(str); i++)
- if (isalpha(str[i]))
- e = true;
- if (!e) {
- // Проверка на отрицательность числа
- if (str[0] == '-')
- neg = 1;
- else
- neg = 0;
- // Сравнивание массива введённого нами значения с максимальным допустимым массивом
- if (strlen(str) - neg > strlen(max)) // Если массив str имеет длину больше, чем массив max
- e = true;
- else if (strlen(str) - neg == strlen(max)) { // Если длины массивов совпадают
- for (i = neg; i < strlen(str); i++) {
- if (str[i] > max[i - neg]) {
- e = true;
- break;
- }
- else continue;
- }
- }
- }
- } while (e);
- // Перевод массива char в число
- for (i = strlen(str) - 1; i >= neg; i--) {
- res += (str[i] - '0') * p;
- p *= 10;
- }
- if (neg)
- res = -res;
- return res;
- }
- void RomanConv()
- {
- int intnum, m, d, c, l, x, v, i, n;
- printf("\n Введите число в десятичной системе счисления: ");
- while (1) {
- intnum = Input();
- if (intnum <= 0)
- printf("Ошибка. Повторите ввод: ");
- else break;
- }
- printf("\n Число %d в римской системе счисления: ", intnum);
- if (intnum >= 1000)
- {
- m = intnum / 1000;
- for (n = 0; n < m; n++)
- printf("M");
- intnum = intnum % 1000;
- }
- if (intnum >= 900)
- {
- printf("CM");
- intnum = intnum % 900;
- }
- else if (intnum >= 500)
- {
- d = intnum / 500;
- for (n = 0; n < d; n++)
- printf("D");
- intnum = intnum % 500;
- }
- if (intnum >= 400)
- {
- printf("CD");
- intnum = intnum % 400;
- }
- else if (intnum >= 100)
- {
- c = intnum / 100;
- for (n = 0; n < c; n++)
- printf("C");
- intnum = intnum % 100;
- }
- if (intnum >= 90)
- {
- printf("XC");
- intnum = intnum % 90;
- }
- else if (intnum >= 50)
- {
- l = intnum / 50;
- for (n = 0; n < l; n++)
- printf("L");
- intnum = intnum % 50;
- }
- if (intnum >= 40)
- {
- printf("XL");
- intnum = intnum % 40;
- }
- else if (intnum >= 10)
- {
- x = intnum / 10;
- for (n = 0; n < x; n++)
- printf("X");
- intnum = intnum % 10;
- }
- if (intnum >= 9)
- {
- printf("IX");
- intnum = intnum % 9;
- }
- else if (intnum >= 5)
- {
- v = intnum / 5;
- for (n = 0; n < v; n++)
- printf("V");
- intnum = intnum % 5;
- }
- if (intnum >= 4)
- {
- printf("IV");
- intnum = intnum % 4;
- }
- else if (intnum >= 1)
- {
- i = intnum;
- for (n = 0; n < intnum; n++)
- printf("I");
- }
- printf("\n");
- }
- int main()
- {
- SetConsoleCP(1251);
- SetConsoleOutputCP(1251);
- printf("Перевод В Римскую систему счисления из десятичной.\n");
- RomanConv();
- system("Pause");
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement