A52001. 计算两个日期之间的天数
填空题
中等
知识点
题目描述
计算两个日期之间的天数
题目描述
求两个日期d1,d2之间相差的天数d2-d1。
输入
输入数据有若干组。每组数据一行,有六个整数,表示两个日期d1,d2,格式为:年月日。
输出
对于每一组数据,输出两个日期d1,d2之间相差的天数, 格式参照样例输出。
样例输入
2000 1 1 2002 10 1
2010 1 10 2010 3 20
样例输出
2002/10/1-2000/1/1=1004
2010/3/20-2010/1/10=69
参考答案
#include <stdio.h>
int daysOfMonth(int y,int m);
//计算任意两个日期之间的天数
//判断输入有效
int valiDate(int y,int m,int d){
if(y>3000||y<1900){
printf("error year!\n");
return 1;
}
if(m>12||m<1){
printf("error month!\n");
return 1;
}
if(d>daysOfMonth(y,m)||d<1){
printf("error day!\n");
return 1;
}
return 0;
}
//一个整月的天数
int daysOfMonth(int y,int m){
if(m==2){
if(y%4==0&&y%100!=0||y%400==0){
return 29;
}else{
return 28;
}
}else if(m==4||m==6||m==9||m==11){
return 30;
}else{
return 31;
}
}
//输入年份已经过的天数
int daysBefore(int y,int m,int d){
int i,result=0;
for(i=1;i<=12;i++){
if(i==m){
result += d;
return result;
}else{
result += daysOfMonth(y,i);
}
}
}
//计算每年天数
int daysOfYear(int y){
if(y%4==0&&y%400!=0||y%400==0){
return 366;
}else return 365;
}
//主函数
int main(){
int y1,m1,d1,y2,m2,d2;
while(scanf("%d%d%d",&y1,&m1,&d1)!=EOF)
{
while(valiDate(y1,m1,d1)){
scanf("%d%d%d",&y1,&m1,&d1);
}
scanf("%d%d%d",&y2,&m2,&d2);
while(valiDate(y2,m2,d2)){
scanf("%d%d%d",&y2,&m2,&d2);
}
int i,result=0;
for(i=y1;i<y2;i++){
result += daysOfYear(i);
}
result = result - daysBefore(y1,m1,d1) + daysBefore(y2,m2,d2);
printf("%d/%d/%d-%d/%d/%d=%d\n",y2,m2,d2,y1,m1,d1,result);
}
return 0;
}
上一题
下一题