求某年某月某日是这一年的第几天。
输入样例 :2020 12 31
输出样例:366
#include <bits/stdc++.h>
using namespace std;
bool isrun(int y)
{
return y%400==0 || (y%4==0 &&y%100!=0);
}
int main()
{
int dat[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int year,month,day;
cin>>year>>month>>day;
int sum=0;
if(isrun(year))//判断是否是闰年
{
while(month--)
{
if(month==2)
{
sum+=29; //天数累加
}
else
{
sum+=dat[month];
}
}
}
else
{
while(month--)
{
sum+=dat[month];
}
}
cout<<sum+day<<endl;
return 0;
}
计算从xx年xx月xx日 ------ xx年xx月xx日 一共经历了多少天
输入样例:2020 12 12
2020 12 20
输出样例:8
#include <bits/stdc++.h>
using namespace std;
int dat[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
//判断是否是闰年
bool isLeaf(int y)
{
return (y%400==0) || (y%4==0 && y%100!=0);
}
//计算这一年的开始 至 xx年xx月xx日 一共多少天
int SumY(int y,int m,int d)
{
int sum=0;
if(isLeaf(y)){
while(m--){
if(m==2){
sum+=29;
}
else{
sum+=dat[m];
}
}
}
else{
while(m--){
sum+=dat[m];
}
}
return sum;
}
//计算xx年xx月xx日 至 一年的结束 一共多少天
int SumX(int y,int m,int d)
{
int sum=0;
if(isLeaf(y)){
sum=366-SumY(y,m,d);
return sum;
}
else{
return 365-SumY(y,m,d);
}
}
int main()
{
int y,m,d;
int endy,endm,endd;
cin>>y>>m>>d;
cin>>endy>>endm>>endd;
int sum=0;
//如果y和endy是同一年
if(y==endy)
{
//如果月份相同就只需要将日期相减即可
if(m==endm){
sum+=endd-d;
}
else{
if(m==2)
{
if(isLeaf(y))
{
sum+=29-d;
}
else{
sum+=28-d;
}
}
if(m==1 || m==3 ||m==5 || m==7 || m==8 || m==10 || m==12)
{
sum+=31-d;
}
else
{
sum+=30-d;
}
for(int i=m+1;i<endm;i++)
{
sum+=dat[m];
}
sum+=endd;
}
}
//如果y和endy不是同一年
else{
//计算y年的开始 至 y年m月d日 一共多少天
sum+=SumX(y,m,d);
//计算y年到endy年中间的天数
for(int i=y+1;i<endy;i++)
{
if(isLeaf(y)){
sum+=366;
}
else{
sum+=365;
}
}
//计算endd年的开始 至 endy年endm月endd日 一共多少天
sum+=SumY(endy,endm,endd);
}
cout<<sum<<endl;
return 0;
}