#include<iostream>
/*
* 公元1582年前,能被4整除的年份;
* 公元1582年后,世纪年中能被400整除的,和非世纪年中能被4整除的年份。
* 对于特别大的年份(暂时定大于172800),这年如果能被3200整除,并且能被172800整除则是闰年。
*/
int Leapyear(int year) {
if (year < 0)
return -1;//表示输入有误
if (year < 1582) //第一种情况
{
if( 0 == year % 4)
return 0; //表示是闰年
else
return 1; //表示是平年
}
if (year > 1582 && year < 172800)
{
if (0 == year % 100) //世纪元年
{
if (0 == year % 400)
return 0;
return 1;
}
else //非世纪元年
if (0 == year % 4)
return 0;
else
return 1;
}
else
if (year % 3200 == 0 && year % 172800 == 0)
return 0;
else
return 1;
}
/*测试代码
*author:dengzp
*2020年2月21日14:41:22
**/
int main() {
std::cout << "****判断是不是闰年****" << std::endl;
std::cout << "请输入一个需要判断的年份,需要大于公元0年,输入-2退出:" << std::endl;
int year = 0;
while (year != -2) { //输入-2退出
std::cin >> year;
int result = Leapyear(year);
switch (result) {
case -1:
std::cout << "Input ERROR!" << std::endl;
break;
case 0:
std::cout << " 输入的数据判断是闰年!" << std::endl;
break;
case 1:
std::cout << " 输入的数据判断是平年!" << std::endl;
break;
default:
std::cout << " Unknow ERROR!" << std::endl;
}
}
return 0;
}
输出结果:
image.png