您的位置:首页 > 编程语言 > C语言/C++

1008_第几天

2016-03-11 20:52 239 查看

第几天

时间限制(普通/Java) : 1000 MS/ 3000 MS          运行内存限制 : 65536 KByte
总提交 : 2577            测试通过 : 757 

比赛描述

在我们现在使用的日历中, 闰年被定义为能被4整除的年份,但是能被100整除而不能被400整除的年是例外,它们不是闰年。例如:1700, 1800, 1900 和 2100不是闰年,而 1600, 2000 和 2400是闰年。

给定公元2000年1月1日后的某年某月某日(包括2000年1月1日),你的任务:(1)给出这一天从公元2000年1月1日开始逝去的天数,(2)判断这一天是当年的第几天。

输入

输入包含若干行,每行包含三个空格间隔的正整数,它们分别表示年、月、日。输入最后一行是−1, 不必处理。可以假设结果的年份不会超过9999。

输出

多组,每组两行,分别为每行输入所代表的一天从公元2000年1月1日开始逝去的天数、在当年的第几天。

样例输入

2000 1 1

2009 3 14

-1

样例输出

0

1

3360

73

题目来源

NUPT
我的代码:
#include <iostream>
using namespace std;

bool is_ryear(int year);
int main()
{
int year, month, day;
int days1 = 0, days2 = 0; //逝去的天数 和 当年的天数
int year_days = 365;
int month_days[13] = { 0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
while (cin >> year&&year != -1 && cin >> month&&cin >> day)
{
for (int y = 2000; y < year; y++) //先把整年天数相加
{
if (is_ryear(y))
days1 += (year_days+1); //是闰年则天数多一
else
days1 += year_days;
}

for (int m = 1; m < month; m++) //整月天数相加
days2 += month_days[m];
if (is_ryear(year) && month>2) //闰年2月要加1
++days2;
days2 += day; //加最后一个月天数
days1 += (days2 - 1); //加最后一年天数
cout << days1 << endl;
cout << days2 << endl;
days1 = days2 = 0; //重置
}
}

bool is_ryear(int year) //判断闰年条件①:非整百年数除以4,无余为闰,有余为平;②整百年数除以400,无余为闰有余平。
{
if (year % 4 != 0)
return false;
else if (year % 100 == 0 && year % 400 != 0)
return false;
else
return true;
}
思路:先算整的
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  南邮ACM 1008 第几天 C++