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;
}
思路:先算整的
相关文章推荐
- 使用C++实现JNI接口需要注意的事项
- 关于指针的一些事情
- c++ primer 第五版 笔记前言
- share_ptr的几个注意点
- Lua中调用C++函数示例
- Lua教程(一):在C++中嵌入Lua脚本
- Lua教程(二):C++和Lua相互传递数据示例
- C++联合体转换成C#结构的实现方法
- C++高级程序员成长之路
- C++编写简单的打靶游戏
- C++ 自定义控件的移植问题
- C++变位词问题分析
- C/C++数据对齐详细解析
- C++基于栈实现铁轨问题
- C++中引用的使用总结
- 使用Lua来扩展C++程序的方法
- C++中调用Lua函数实例
- Lua和C++的通信流程代码实例
- C与C++之间相互调用实例方法讲解
- 解析C++中派生的概念以及派生类成员的访问属性