记一个日期为 yy 年 mm 月 dd 日。统计从 2000 年 1 月 1 日(含)到 2000000 年 1 月 1 日(含),有多少个日期满足年份 yy 是月份 mm 的倍数,同时也是 dd 的倍数。
当年份是 4 的倍数而不是 100 的倍数或者年份是 400 的倍数时,这一年是闰年,其他的年份都不是闰年。
遍历每一年的每一个月的每一天。二月份天数最为特殊,闰年29,平年28
我们可以先创建一个数组int MonthDay[12]={31,28,31,30,31,30,31,31,30,31,30,31}
在遍历年的循环中设置一个flag=((i%4 == 0 && i%100!=0) || (i%400 == 0))
更新MonthDay[1]=28+flag
这样就解决二月份天数问题

#include<iostream>
using namespace std;
int main(){
int MonthDay[12]={31,28,31,30,31,30,31,31,30,31,30,31};
int count=0;
for(int i=2000;i<=1999999;i++)
{
int IsLeapYear=((i%4==0 && i%100!=0) || (i%400==0));
MonthDay[1]=28+IsLeapYear;
for(int j=1;j<=12;j++)
{
for(int k=1;k<=MonthDay[j-1];k++)
{
if(i%j==0&&i%k==0)
count++;
}
}
}
cout<<count+1;
}