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

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

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

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

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

textual
Листинг программы
#include <limits.h>
#include <stdio.h>
#include <string.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"};
 
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) {
                *roman=0;
                return roman;
        }
        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 year2century(unsigned short int y) {
    return ((y%100) == 0) ? (y/100) : (y/100 + 1);
}
 
int main() {
    int y;
    printf("Введите год:");
    scanf("%d", &y);
    if (y > USHRT_MAX || y <= 0) { 
        printf("Ошибка");
        return -1;
    }
    printf("Век: %s", arab2roman(year2century(y)));
    return 0;
}

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

  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
Похожие ответы