这个怎么回事呢?题意就是,以前有个low的立法,每4年算一个闰年,新的历法就是其他的不变,然后能被100整除但是不能被400整除的就不能算闰年。给你了一个标准的,比如1582年10月4日,应该变到1582年10月15日,问他之后的天数如果变历法,那么变法的第一天的天数应该是什么?
题解有一下坑点1。只有1700,1800,类似的算比正常多加1天
2.还有就是如果当年是1700,1800类似的,如果在2.29号之前应该不算多的一天。其他的算
3.有可能多出来2个多月,所以说,那个判断月份和天数,最好用while来写。
4.注意下表问题。。。。。。数组是从0开始的
#include<cstdio>
#include<cstring>
#include<algorithm>
#include<cmath>
using namespace std;
int y , m , d;
int leapM[2][13] = {{31 , 28 , 31 , 30 , 31, 30 , 31 , 31 , 30 , 31 ,30 ,31},
{31 , 29 , 31 , 30 , 31, 30 , 31 , 31 , 30 , 31 ,30 ,31}};
int old(int x)
{
if(x % 4 == 0) return 1;
else return 0;
}
int _new(int x)
{
if(x % 100 == 0 && x % 400 != 0) return 1;
else return 0;
}
int new_(int x)
{
if(x % 4 == 0){
if(x % 100 == 0 && x % 400 != 0) return 0;
return 1;
}
return 0;
}
int main()
{
while(~scanf("%d-%d-%d",&y , &m , &d)){
int ans = 11;
for(int i = 1582 ; i <= y ; i++){
if(old(i) && _new(i)) ans++;
// printf("i = %d\n",i);
}
if(old(y) && _new(y)){
if(m < 3) ans--;
}
d += ans;
// printf("d = %d\n",d);
while(m > 12 || d > leapM[new_(y)][m - 1]){
if(d > leapM[new_(y)][m - 1]){
d -= leapM[new_(y)][m - 1];
// printf("day = %d\n",leapM[new_(y)][m - 1]);
m += 1;
}
if(m > 12){
m -= 12;
y += 1;
}
}
printf("%d-%02d-%02d\n" ,y , m , d);
}
}