题目描述
输入2 个正整数a和b,表示开始的年份和结束的年份,问从a年到b年有多少闰年?
输入格式
第一行2个整数a和b,范围在[1, 1000000000]。
输出格式
只一个整数。
输入/输出例子1
输入:
1 10000
输出:
2425
知识链接:闰年
(1) 能被4整除,但不能被100整除的年份 (例如2008是闰年,1900不是闰年) 是闰年。
(2) 能被100整除并且400整除的年份 (例如2000年) 也是闰年。
解题思路
由于本题的数据范围很大,一个个遍历会超时。
我们都知道每两个闰年相差4年,所以我们可以把循环变量 i 的初始值变成4的倍数,
每次循环 i+=4 。
参考答案
#include <stdio.h> using namespace std; int Turn(int n)//根据 a 把循环变量初值变成 4 的倍数 { for(int i=n;i<=n+4;i++) { if(i%4==0) return i; } } int main() { int a,b,sum=0;//sum用来统计闰年个数 scanf("%d %d",&a,&b); for(int i=Turn(a);i<=b;i+=4)//循环变量每次 加4 { if(i%100!=0||i%400==0)// i%100!=0 用来判断i是不是普通闰年 // i%400==0 用来判断i是整百数并且能被400整除 sum++; } printf("%d",sum); return 0; }