地址:http://10.105.242.80/problem/p/87/
87. 日期
时间限制 1000 ms 内存限制 65536 KB
题目描述
请你计算出第X年Y月Z日是第X年的第几天。其中,1月1日是第一天,1月2日是第二天,以此类推。
计算时请注意闰年的影响。对于非整百年,年数能整除4是闰年,否则不是闰年;对于整百年,年数能整除400是闰年,否则不是闰年。如1900年和1901年不是闰年,而2000年和2004年是闰年。
输入格式
第一行有一个整数T (T≤100),表示一共有T组数据需要你处理。
接下来一共有T行,每行是一个如下格式的字符串:X:Y:Z,表示你需要计算第X年Y月Z日是第X年的第几天。其中X是一个大于0,小于2100的整数。保证字符串的格式都是合法的,字符串所表示的日期也都是存在的。
输出格式
对于每组数据,你需要输出一个整数,表示所求得的结果。
输入样例
2
2013:4:12
112:4:12
输出样例
102
103
代码:
/*
87. 日期
时间限制 1000 ms 内存限制 65536 KB
题目描述
请你计算出第X年Y月Z日是第X年的第几天。其中,1月1日是第一天,1月2日是第二天,以此类推。
计算时请注意闰年的影响。对于非整百年,年数能整除4是闰年,否则不是闰年;
对于整百年,年数能整除400是闰年,否则不是闰年。如1900年和1901年不是闰年,而2000年和2004年是闰年。
输入格式
第一行有一个整数T(T≤100),表示一共有T组数据需要你处理。
接下来一共有T行,每行是一个如下格式的字符串:X : Y:Z,表示你需要计算第X年Y月Z日是第X年的第几天。
其中X是一个大于0,小于2100的整数。保证字符串的格式都是合法的,字符串所表示的日期也都是存在的。
输出格式
对于每组数据,你需要输出一个整数,表示所求得的结果。
输入样例
2
2013:4 : 12
112 : 4 : 12
输出样例
102
103
Project: date
Date: 2019/02/25
Author: Frank Yu
*/
#include<iostream>
#include<string>
#include<set>
#include<vector>
#include<algorithm>
#include<sstream>
using namespace std;
bool check(int year)//判断年份是否为闰年
{
bool flag=false;
if((year%4==0&&year%100!=0)||year%400==0) flag=true; //闰年
return flag;
}
//主函数
int main()
{
int year,month,day;
int T;
bool flag,y_flag,m_flag;
string s,y,m,d;
stringstream ss;
cin>>T;
while(T--)
{
int sum=0;
y="";m="";d="";
y_flag=false;m_flag=false;
cin>>s;//输入日期字符串
for(int i=0;i<s.length();i++)//拆分
{
if(s[i]==':'&&!y_flag){y_flag=true;continue;}//碰见第一个冒号,年份拆分完毕
if(s[i]==':'&&y_flag){m_flag=true;continue;}//碰见第二个冒号,月份拆分完毕
if(s[i]!=':'&&!y_flag)y+=s[i];
else if(s[i]!=':'&&!m_flag)m+=s[i];
else if(s[i]!=':')d+=s[i];
else continue;
}
//cout<<y<<" "<<m<<" "<<d<<endl;
ss.clear();
ss<<y; //转成int型
ss>>year;
ss.clear();
ss<<m;
ss>>month;
ss.clear();
ss<<d;
ss>>day;
//cout<<year<<" "<<month<<" "<<day<<endl;
flag=check(year);
switch(month)
{
case 1:sum=day;break;
case 2:sum=31+day;break;
case 3:sum=31+28+day;break;
case 4:sum=31+28+31+day;break;
case 5:sum=31+28+31+30+day;break;
case 6:sum=31+28+31+30+31+day;break;
case 7:sum=31+28+31+30+31+30+day;break;
case 8:sum=31+28+31+30+31+30+31+day;break;
case 9:sum=31+28+31+30+31+30+31+31+day;break;
case 10:sum=31+28+31+30+31+30+31+31+30+day;break;
case 11:sum=31+28+31+30+31+30+31+31+30+31+day;break;
case 12:sum=31+28+31+30+31+30+31+31+30+31+30+day;break;
}
if(month>2&&flag)sum++;//闰年2月多一天
cout<<sum<<endl;
}
return 0;
}
更多数据结构与算法实现:数据结构(严蔚敏版)与算法的实现(含全部代码)
有问题请下方评论,转载请注明出处,并附有原文链接,谢谢!如有侵权,请及时联系。