Advertisement
Guest User

Untitled

a guest
Nov 18th, 2019
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.19 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <Windows.h>
  3.  
  4. using namespace std;
  5.  
  6. int Input()
  7. {
  8.     const char max[11] = "2147483647";
  9.     char str[256];
  10.     int i, neg, p = 1, res = 0;
  11.     bool e = false;
  12.  
  13.     do {
  14.         if (e) {
  15.             printf("Ошибка. Повторите ввод: ");
  16.         }
  17.         gets_s(str, 256);
  18.         e = false;
  19.  
  20.         // Проверка на наличие букв в строке
  21.         for (i = 0; i < strlen(str); i++)
  22.             if (isalpha(str[i]))
  23.                 e = true;
  24.         if (!e) {
  25.             // Проверка на отрицательность числа
  26.             if (str[0] == '-')
  27.                 neg = 1;
  28.             else
  29.                 neg = 0;
  30.  
  31.             // Сравнивание массива введённого нами значения с максимальным допустимым массивом
  32.             if (strlen(str) - neg > strlen(max)) // Если массив str имеет длину больше, чем массив max
  33.                 e = true;
  34.             else if (strlen(str) - neg == strlen(max)) { // Если длины массивов совпадают
  35.                 for (i = neg; i < strlen(str); i++) {
  36.                     if (str[i] > max[i - neg]) {
  37.                         e = true;
  38.                         break;
  39.                     }
  40.                     else continue;
  41.                 }
  42.             }
  43.         }
  44.     } while (e);
  45.  
  46.     // Перевод массива char в число
  47.     for (i = strlen(str) - 1; i >= neg; i--) {
  48.         res += (str[i] - '0') * p;
  49.         p *= 10;
  50.     }
  51.     if (neg)
  52.         res = -res;
  53.  
  54.     return res;
  55. }
  56.  
  57. void RomanConv()
  58. {
  59.     int intnum, m, d, c, l, x, v, i, n;
  60.  
  61.     printf("\n  Введите число в десятичной системе счисления: ");
  62.     while (1) {
  63.         intnum = Input();
  64.         if (intnum <= 0)
  65.             printf("Ошибка. Повторите ввод: ");
  66.         else break;
  67.     }
  68.  
  69.     printf("\n  Число %d в римской системе счисления: ", intnum);
  70.     if (intnum >= 1000)
  71.     {
  72.         m = intnum / 1000;
  73.         for (n = 0; n < m; n++)
  74.             printf("M");
  75.         intnum = intnum % 1000;
  76.     }
  77.     if (intnum >= 900)
  78.     {
  79.         printf("CM");
  80.         intnum = intnum % 900;
  81.     }
  82.     else if (intnum >= 500)
  83.     {
  84.         d = intnum / 500;
  85.         for (n = 0; n < d; n++)
  86.             printf("D");
  87.         intnum = intnum % 500;
  88.     }
  89.     if (intnum >= 400)
  90.     {
  91.         printf("CD");
  92.         intnum = intnum % 400;
  93.     }
  94.     else if (intnum >= 100)
  95.     {
  96.         c = intnum / 100;
  97.         for (n = 0; n < c; n++)
  98.             printf("C");
  99.         intnum = intnum % 100;
  100.     }
  101.     if (intnum >= 90)
  102.     {
  103.         printf("XC");
  104.         intnum = intnum % 90;
  105.     }
  106.     else if (intnum >= 50)
  107.     {
  108.         l = intnum / 50;
  109.         for (n = 0; n < l; n++)
  110.             printf("L");
  111.         intnum = intnum % 50;
  112.     }
  113.     if (intnum >= 40)
  114.     {
  115.         printf("XL");
  116.         intnum = intnum % 40;
  117.     }
  118.     else if (intnum >= 10)
  119.     {
  120.         x = intnum / 10;
  121.         for (n = 0; n < x; n++)
  122.             printf("X");
  123.         intnum = intnum % 10;
  124.     }
  125.     if (intnum >= 9)
  126.     {
  127.         printf("IX");
  128.         intnum = intnum % 9;
  129.     }
  130.     else if (intnum >= 5)
  131.     {
  132.         v = intnum / 5;
  133.         for (n = 0; n < v; n++)
  134.             printf("V");
  135.         intnum = intnum % 5;
  136.     }
  137.     if (intnum >= 4)
  138.     {
  139.         printf("IV");
  140.         intnum = intnum % 4;
  141.     }
  142.     else if (intnum >= 1)
  143.     {
  144.         i = intnum;
  145.         for (n = 0; n < intnum; n++)
  146.             printf("I");
  147.     }
  148.     printf("\n");
  149. }
  150.  
  151. int main()
  152. {
  153.     SetConsoleCP(1251);
  154.     SetConsoleOutputCP(1251);
  155.  
  156.     printf("Перевод В Римскую систему счисления из десятичной.\n");
  157.     RomanConv();
  158.     system("Pause");
  159.     return 0;
  160. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement