Top.Mail.Ru
Ответы

C++. Как проверить, является ли большой год високосным?

Допустим, у меня имеется год, больший, чем диапазон int, long int, long long int. Как мне посчитать, является ли этот год високосным, если остаток от деления от double брать нельзя? Fmod выдает неверные остатки

Только авторизированные пользователи могут оставлять свои ответы
Дата
Популярность
Аватар пользователя
Новичок

Год в double? Не иначе аккаунт бога взломали!
Из double можно вычитать большие значения, кратные 400, (например 400*10 в какой-то степени) пока оставшееся значение не влезет в unsigned long long.
Но вы должны понимать что точность будет резко теряться при больших значениях, так как мантисса имеет даже меньшую разрядность чем unsigned long long, и вмещает всего около 19 разядов(в десятичном виде)
Так что если планируете жить до миллиардов квартиллионов мега-лет, рекомендую воспользоваться библиотеками длинных чисел (целых).

Аватар пользователя
Ученик

самый простой вариант - считать число как строку, по последним 4-м цифрам проверить делимость на 4, на 100, на 400, сделать из этого вывод о високосности

Аватар пользователя
Знаток

bool isLeapYear(int year) {
if (year % 4 != 0) {
return false;
} else if (year % 100 != 0) {
return true;
} else if (year % 400 != 0) {
return false;
} else {
return true;
}
}



На не забудь лайк