По номеру некоторого года определить номер его столетия - C (СИ)

Узнай цену своей работы

Формулировка задачи:

По номеру у(у>0) некоторого года определить с-номер его столетия(учесть, что, к примеру, началом ХХ столетия был 1901, а не 1900 год).

Решение задачи: «По номеру некоторого года определить номер его столетия»

textual
Листинг программы
  1. #include <limits.h>
  2. #include <stdio.h>
  3. #include <string.h>
  4.  
  5. const int   arabar[]  = {  1,   4,    5,   9,    10,  40,  50,   90,  100, 400,  500, 900,  1000};
  6. const char *romanar[] = { "I", "IV", "V", "IX", "X", "XL", "L", "XC", "C", "CD", "D", "CM", "M"};
  7.  
  8. char *arab2roman(unsigned short int arab) {
  9.         static char roman[80];
  10.         const int m = sizeof(arabar)/sizeof(int)-1, arabmax=arabar[m];
  11.         const char romanmax=romanar[m][0];
  12.         int i, n;
  13.         if (!arab) {
  14.                 *roman=0;
  15.                 return roman;
  16.         }
  17.         i = 0;
  18.         while(arab>arabmax) {
  19.                 roman[i++] = romanmax;
  20.                 arab      -= arabmax;
  21.         }
  22.         n = m;
  23.         while(arab > 0) {
  24.                 if (arab >= arabar[n]) {
  25.                         roman[i++] = romanar[n][0];
  26.                         if (n&1)
  27.                                 roman[i++] = romanar[n][1];
  28.                         arab -= arabar[n];
  29.                 } else
  30.                         n--;
  31.         }
  32.         roman[i] = 0;
  33.         return roman;
  34. }
  35.  
  36. unsigned short int year2century(unsigned short int y) {
  37.     return ((y%100) == 0) ? (y/100) : (y/100 + 1);
  38. }
  39.  
  40. int main() {
  41.     int y;
  42.     printf("Введите год:");
  43.     scanf("%d", &y);
  44.     if (y > USHRT_MAX || y <= 0) {
  45.         printf("Ошибка");
  46.         return -1;
  47.     }
  48.     printf("Век: %s", arab2roman(year2century(y)));
  49.     return 0;
  50. }

Объяснение кода листинга программы

  1. Объявлены две массивы: arabar[] и romanar[].
  2. В функции arab2roman() перебираются значения из массива arabar[] и для каждого значения, которое больше текущего значения переменной arab, добавляется соответствующая римская цифра в начало строки roman.
  3. Если значение арабской цифры больше максимального значения в массиве arabar[], то добавляется самая большая римская цифра (в данном случае это C или M) и от арабской цифры вычитается максимальное значение в массиве arabar[].
  4. В функции year2century() определяется, является ли год четным или нечетным, и в зависимости от этого определяется номер века.
  5. В функции main() пользователю предлагается ввести год, который затем проверяется на корректность (не меньше 1 и не больше 9999).
  6. Если год некорректен, то выводится сообщение об ошибке.
  7. В противном случае, вызывается функция year2century(), результат выводится на экран.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

12   голосов , оценка 4.083 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы