По номеру некоторого года определить номер его столетия - 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(), результат выводится на экран.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д