题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1076
题 意:给你一个年份,找到从他开始的第n个闰年。
思 路:
1.此题暴力可过。
代码如下:
#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <cmath>
#include <algorithm>
int main()
{
int T;
scanf ( "%d",&T );
while( T-- )
{
int y,n;
scanf ( "%d %d", &y, &n );
while(1)
{
if(( y %4==0&&y%100!=0)||(y%400)==0)
break;
y++;
}
if(n!=0) n--;
while( n )
{
y+=4;
if(( y %4==0&&y%100!=0)||(y%400)==0)
n--;
}
printf("%d\n",y);
}
return 0;
}
2.找到400年内的闰年数97,然后对其计算,看有几个400年,当然不要忘记100年内的计算。
代码如下:
#include <iostream>
using namespace std;
#include <string.h>
#include <stdio.h>
#include <cmath>
#include <algorithm>
int main()
{
int T;
scanf ( "%d",&T );
while( T-- )
{
int y,n;
scanf ( "%d %d", &y, &n );
while(1)
{
if(( y %4==0&&y%100!=0)||(y%400)==0)
break;
y++;
}
if(n!=0) n--;
y = y + n/97*400;
n=n%97;
while( n )//对100年内的处理
{
y+=4;
if(( y %4==0&&y%100!=0)||(y%400)==0)
n--;
}
printf("%d\n",y);
}
return 0;
}
另附一大神的代码:
#include<iostream>
using namespace std;
int main()
{
int num;
cin>>num;
while(num--)
{
int y,n;
cin>>y>>n;
while(!(y%400==0)) //找出第一个满足y%400==0的闰年
{
if(y%4==0 && y%100!=0)
{
n--;
if(n==0)
break; //退出循环
}
y++;
}
if(n!=0)
n--;
y=y+n/97*400;
n = n%97;
if(n) n += (n-1)/24;
y=y+n/25*100+n%25*4; //每100年24个闰年
cout<<y<<endl;
}
return 0;
}