就不放原题,直接给自己的思路和代码啦
思路:1.首先要区分是闰年(二月是29天),还是平年(二月是28天)这是一个频繁考点,
2.其次便是差值解决方法,个人比较偏向于的思路是:从年份开始,记录从小的年份到大的年份之间需要的年份差,同时区分该年份是闰年还是评论,年份相同之后,在开始等同月份和天数,最后累积
#include<stdio.h>
#include<string.h>
//日期差值
int main()
{
struct w{
int y;
int m;
int d;
}a[1];
//写一个比较大小的方法和判断闰年的方法
int max(int a,int b){
return a>b;
}
int run(int num){
if((num%4==0&&num%100!=0)||num%400==0)
return 1;
else
return 0;
}
int time1,time2,temp;
int i;
int cha1=0;
int cha2=0;//这两个之后计算日期的时候会用到
scanf("%d%d",&time1,&time2);
if(max(time1,time2)){//交换两者大小,要前者小,后者大
temp=time1;
time1=time2;
time2=temp;
}
//开始分别存储两个时间的年月日
a[0].y=time1/10000;
a[0].m=time1%10000/100;
a[0].d=time1%100;
a[1].y=time2/10000;
a[1].m=time2%10000/100;
a[1].d=time2%100;
//创建两个数组 分别是代表闰年和平年,并且闰年是366天,平年是365天
int a1[13]={0,31,29,31,30,31,30,31,31,30,31,30,31};
int a2[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int sum=0;
//开始比较,从年份开始,要让小年的年份加到大年的年份减一
while((a[0].y+1)!=a[1].y){
if(a[0].y==a[1].y)
break;//直接跳出循环
if((run(a[0].y)&&a[0].m<=2)||(run(a[0].y+1)&&a[0].m>2))//考虑到月份是因为,闰年只在2月生效,情况比较多,一个是年前是闰年年后不是闰年和年前不是闰年,年后是闰年
sum+=366;
else
sum+=365;
a[0].y++;
}
//判断了年之后,现在是小年等于大年或者小年加一年等于大年,分开判断
if(a[0].y==a[1].y){
//开始判断月份,还是分类是否为闰年
if(run(a[0].y)){//那就按照闰年的计算方式
int cha1=0;
int cha2=0;
for(i=0;i<a[1].m;i++){
cha1+=a1[i];
}
cha1+=a[1].d;
for(i=0;i<a[0].m;i++){
cha2+=a1[i];
}
cha2+=a[0].d;
sum=sum+(cha1-cha2+1);//加一是因为题中的相隔一天等于两天的意思
}
else{
for(i=0;i<a[1].m;i++){
cha1+=a2[i];
}
cha1+=a[1].d;
for(i=0;i<a[0].m;i++){
cha2+=a2[i];
}
cha2+=a[0].d;
sum=sum+(cha1-cha2+1);//加一是因为题中的相隔一天等于两天的意思
}
}
//现在是相隔一年的情况,就不比较了,直接把小年的还差一年的天数加上大年多出来的天数,依然要以闰年与否来讨论
else{
if(run(a[0].y)){//意思就是大年不是闰年
for(i=0;i<a[0].m;i++){
cha2+=a1[i];
}
cha2+=a[0].d;
cha2=366-cha2;//小年的剩余天数
for(i=0;i<a[1].m;i++){
cha1+=a2[i];
}
cha1+=a[1].d;//大年的多出来的天数
sum=cha2+cha1;
}
if(run(a[1].y)){//大年是闰年,小年不是闰年
for(i=0;i<a[0].m;i++){
cha2+=a2[i];
}
cha2+=a[0].d;
cha2=365-cha2;//小年的剩余天数
for(i=0;i<a[1].m;i++){
cha1+=a1[i];
}
cha1+=a[1].d;//大年的多出来的天数
sum=cha2+cha1;
}
else{//两者都不是闰年
for(i=0;i<a[0].m;i++){
cha2+=a2[i];
}
cha2+=a[0].d;
cha2=365-cha2;//小年的剩余天数
for(i=0;i<a[1].m;i++){
cha1+=a2[i];
}
cha1+=a[1].d;//大年的多出来的天数
sum=cha2+cha1;
}
}
printf("%d\n",sum);
return 0;
}
出现的错误情况:1.读题的重要性,这题没有说按照yymmdd的日期输入,而是只是输入两个六位数的值,害我在比较这两个数谁大的事情上花了功夫 2.代码过长,过于冗余,需要再修改修改