【问题描述】
结构
struct Date{
int year;
int moth;
int day;
};
利用该结构编写一个程序用来计算两个日期之间相差的天数。
【输入形式】
输入两个日期,每个日期分别占用一行,在一行中日期的年月日是三个整数,以空格分割。并假设第二个日期大于或等于第一个日期。
【输出形式】
第二个日期和第一个日期相差的天数
【输入样例】
2003 3 25
2003 3 29
【输出样例】
4
- 自做答案
//2020/4/4
#include<stdio.h>
struct Date
{
int year;
int month;
int day;
};
int month1[12] = {31,29,31,30,31,30,31,31,30,31,30,31};
int month2[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
int isLeap(int year)
{
if(year%4==0&&year%100!=0 || year%400 == 0)
return 1;
else
return 0;
}
int transform(int y,int m,int d)
{
int i;
int sum = 0;
if(isLeap(y))
{
for(i = 0;i<m-1;i++)
{
sum+=month1[i];
}
sum+=d;
}
else
{
for(i = 0;i<m-1;i++)
{
sum+=month2[i];
}
sum+=d;
}
return sum;
}
int main()
{
int i,j;
Date D1,D2;
scanf("%d%d%d%d%d%d",&D1.year,&D1.month,&D1.day,&D2.year,&D2.month,&D2.day);
int tol = 0;
for(i = 0;i<= D2.year - D1.year - 1;i++)
{
tol += transform(D1.year + i,12,31);
}
int day1 = transform(D1.year,D1.month,D1.day);
int day2 = transform(D2.year,D2.month,D2.day);
tol -= day1;
tol += day2;
printf("%d\n",tol);
return 0;
}
/*
IN:
2004 3 25
2004 3 29
OUT:
4
IN:
2002 3 25
2003 3 29
OUT:
369
*/