По номеру некоторого года определить номер его столетия - 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; }
Объяснение кода листинга программы
- Объявлены две массивы: arabar[] и romanar[].
- В функции arab2roman() перебираются значения из массива arabar[] и для каждого значения, которое больше текущего значения переменной arab, добавляется соответствующая римская цифра в начало строки roman.
- Если значение арабской цифры больше максимального значения в массиве arabar[], то добавляется самая большая римская цифра (в данном случае это C или M) и от арабской цифры вычитается максимальное значение в массиве arabar[].
- В функции year2century() определяется, является ли год четным или нечетным, и в зависимости от этого определяется номер века.
- В функции main() пользователю предлагается ввести год, который затем проверяется на корректность (не меньше 1 и не больше 9999).
- Если год некорректен, то выводится сообщение об ошибке.
- В противном случае, вызывается функция year2century(), результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д