int main()
{
int yyyy,mm,dd,a,b
scanf("%d/%d/%d",&yyyy,&mm,&dd)
a=31*(mm>1)+28*(mm>2)+31*(mm>3)+30*(mm>4)+31*(mm>5)+30*(mm>6)+31*(mm>7)+31*(mm>8)+30*(mm>9)+31*(mm>10)+30*(mm>11)+dd
b=((yyyy%4==0)*(yyyy%100!=0)+(yyyy%400==0))*(mm>2)
printf("%d\n",a+b)
return 0
}
//代码错误是:printf写成了pritnf//代码考虑的不周全,如果输入的是同一年,那代码怎么计算,还有不同年计算也有大问题
//你的代码思路看的我头大,干脆没看,在你的代码基础上直接给改了,供参考
//这个代码中注释的应该很清楚,有疑问可以追问
#include <stdio.h>
int leap(int year)
{
if (year% 4 == 0 || year% 400 == 0 && year% 100 != 0)
return 1
else
return 0
}
int a[12] = { 31,29,31,30,31,30,31,31,30,31,30,31 }/*闰年月份天数*/
int b[12] = { 31,28,31,30,31,30,31,31,30,31,30,31 }
void main()
{
int t, s, i, t1 = 0, n = 0, n2 = 365, n1 = 366/*s为总天数,n为年中间天数*/
int y1, m1, d1
int y2, m2, d2
printf("请输入第一个年月日:\n")
scanf("%d%d%d", &y1, &m1, &d1)
printf("请输入第二个年月日:\n")
scanf("%d%d%d", &y2, &m2, &d2)
if (m1 > 12 || d1 > 31 || m2 > 12 || d2 > 31)
{
printf("输入有误,请重输!")
return //加个错误退出
}
//先输入的是较后的年月日,就交换过来
if(y1*10000+m1*100+d1>y2*10000+m2*100+d2)
{
t=y1 y1=y2 y2=t
t=m1 m1=m2 m2=t
t=d1 d1=d2 d2=t
}
//这里计算中间年份的天数,比如2000.2.2-2003.2.3,这里计算2001和2002的天数,后面再计算2000.2.2到2001.1.1的天数和2003.1.1到2003.2.3的天数
for (i = y1 + 1 i < y2 i++)
{
if (leap(i) == 1)
n = n + n1
else
n = n + n2
}
if (y1 < y2)//如果不同年
{
//计算y1年m1月之后月份的天数,比如2000.2.2,就计算2000年3月到12月的天数
for (i = m1 + 1i <= 12 i++)
{
if (leap(y1) == 1)
t1 = t1 + a[i-1]
else
t1 = t1 + b[i-1]
}
//计算y1年m1月d1日当月剩余的天数
if (leap(y1) == 1)
t1=t1+a[m1-1]-d1
else
t1=t1+b[m1-1]-d1
//计算y2年1月1日到y2年m2月d2日的天数
for (i = 1i < m2 i++)
{
if (leap(y2) == 1)
t1 = t1 + a[i-1]
else
t1 = t1 + b[i-1]
}
t1=t1+d2
}
else //同一年
{
if(m1==m2) //同一年又同一月
{
t1=d2-d1
}
else
{
//同一年不同月,先计算中间月份的天数
for (i = m1 + 1i < m2 i++)
{
if (leap(y1) == 1)
t1 = t1 + a[i-1]
else
t1 = t1 + b[i-1]
}
//计算m1月d1日当月剩余天数加上m2月d2日的天数
if (leap(y1) == 1)
t1=t1+a[m1-1]-d1+d2
else
t1=t1+b[m1-1]-d1+d2
}
}
s = n + t1
printf("%d年%d月%d日与%d年%d月%d日共有%d天\n", y1, m1, d1, y2, m2, d2, s)
}