C语言求两个日期相差的天数
#include<stdio.h>intleap_year(int);intyear_days(int);intdays(int,int,int);intleap_yea...
#include <stdio.h>
int leap_year( int );
int year_days( int );
int days(int,int,int);
int leap_year( int year ) // 判断闰年或平年
{ return ( (year%4==0 && year%100!=0) || year%400==0 ) ? 1 : 0;
}
int year_days(int year) // 计算一整年的天数
{ return leap_year( year ) ? 366 : 365;
}
int days( int year, int month, int day ) // 计算该天month,day 是本年year的第几天
{ int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}, i;
if ( leap_year( year ) && month >2 )
day++;
for ( i=1; i<month; i++ )
day += months[i];
return day;
}
int main()
{
int year1,month1,day1,year2,month2,day2,t,p,k,i;
scanf("%d%d%d",&year1,&month1,&day1);
scanf("%d%d%d",&year2,&month2,&day2);
p=365*(year2-year1);
for(i=1;i<(year2-year1);i++)
{
k=year1;
if(leap_year(k)==1)p++;k++;
}
t=days(year2,month2,day2)-days(year1,month1,day1)+p;
if(t==1)printf("1 day\n");
else printf("%d days\n",t);
}
不知道哪错了,求指点T^T 展开
int leap_year( int );
int year_days( int );
int days(int,int,int);
int leap_year( int year ) // 判断闰年或平年
{ return ( (year%4==0 && year%100!=0) || year%400==0 ) ? 1 : 0;
}
int year_days(int year) // 计算一整年的天数
{ return leap_year( year ) ? 366 : 365;
}
int days( int year, int month, int day ) // 计算该天month,day 是本年year的第几天
{ int months[13] = {0,31,28,31,30,31,30,31,31,30,31,30,31}, i;
if ( leap_year( year ) && month >2 )
day++;
for ( i=1; i<month; i++ )
day += months[i];
return day;
}
int main()
{
int year1,month1,day1,year2,month2,day2,t,p,k,i;
scanf("%d%d%d",&year1,&month1,&day1);
scanf("%d%d%d",&year2,&month2,&day2);
p=365*(year2-year1);
for(i=1;i<(year2-year1);i++)
{
k=year1;
if(leap_year(k)==1)p++;k++;
}
t=days(year2,month2,day2)-days(year1,month1,day1)+p;
if(t==1)printf("1 day\n");
else printf("%d days\n",t);
}
不知道哪错了,求指点T^T 展开
2015-10-09 · 做真实的自己 用良心做教育
千锋教育
千锋教育专注HTML5大前端、JavaEE、Python、人工智能、UI&UE、云计算、全栈软件测试、大数据、物联网+嵌入式、Unity游戏开发、网络安全、互联网营销、Go语言等培训教育。
向TA提问
关注
展开全部
计算两个年月日之间的天数,思路是分别算出日期的总天数然后相减。
要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
网上找了一个(偷懒= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)
{
unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//闰年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天数
s+=d;//日的天数
return s;//返回总天数,相对公元1年
}
void main()
{
unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("输入第一个年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("输入第二个年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天数:%ld\n",s1-s2);
else
printf("相差天数:%ld\n",s2-s1);
}
以上代码VC6编译测试通过。
虽然这个思路显得有些笨,但是其它算法,代码太长太复杂,要考虑多种情况,不如直接算两个日期距离公元元年1月1日的天数,然后相减
要考虑闰年的情况,判断闰年的口诀:4年一闰,100年不闰,400年再闰。
((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
网上找了一个(偷懒= =!),修改下如下:
#include <stdio.h>
int sum(int y,int m,int d)
{
unsigned char x[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i,s=0;
for(i=1;i<y;i++)
if(i%4==0 && i%100!=0 || i%400==0)
s+=366;//闰年
else
s+=365;//平年
if(y%4==0 && y%100!=0 || y%400==0)
x[2]=29;
for(i=1;i<m;i++)
s+=x[i];//整月的天数
s+=d;//日的天数
return s;//返回总天数,相对公元1年
}
void main()
{
unsigned char y1,m1,d1,y2,m2,d2;
int s1,s2;
printf("输入第一个年 月 日:");
scanf("%d %d %d",&y1,&m1,&d1);
printf("输入第二个年 月 日:");
scanf("%d %d %d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
if (s1 > s2)
printf("相差天数:%ld\n",s1-s2);
else
printf("相差天数:%ld\n",s2-s1);
}
以上代码VC6编译测试通过。
虽然这个思路显得有些笨,但是其它算法,代码太长太复杂,要考虑多种情况,不如直接算两个日期距离公元元年1月1日的天数,然后相减
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询