长代码版:
#include<stdio.h>
#include<stdlib.h>
int main() {
int year1, year2, month1, month2, day1, day2, sum = 0,temp;
printf("输入第一年的日期:");
scanf_s("%d %d %d", &year1, &month1, &day1);
printf("输入第二年的日期:");
scanf_s("%d %d %d", &year2, &month2, &day2);
if (year1 > year2) //判断输入的时间哪个日期早,哪个晚
{
temp = year1;year1 = year2;year2 = temp;
temp = month1; month1 = month2; month2 = temp;
temp = day1; day1 = day2; day2 = temp;
}
else if (year1 == year2 && month1 > month2) {
temp = month1; month1 = month2; month2 = temp;
temp = day1; day1 = day2; day2 = temp;
}
else if (year1 == year2 && month1 == month2 && day1 > day2) {
temp = day1; day1 = day2; day2 = temp;
}
Loop2:
if (year1 == year2 && month1 == month2) { //第一种情况:年份相同,月份也相同
sum += (day2 - day1);goto Loop3;
}
else if (year1 == year2&&(year1%400==0||(year1%4==0&&year1%100!=0))) { //第二种:年份相同并且都是闰年但是月份不同
for (; month1 <= month2;) {
if (month1 == month2) {
sum += (day2 - day1); goto Loop3;
}
switch (month2)
{case 12: case 10: case 8: case 7:case 5:case 3:case 1:
{sum += day2; month2==3?day2=29:day2 = 30; month2--; }; break;
default: {sum += day2; day2 = 31; month2--; }; break;
}
}
}
else if (year1 == year2 && !(year1 % 400 == 0 || (year1 % 4 == 0 && year1 % 100 != 0))) { //第三种:年分相同并且都不是闰年但是月份不同
for (; month1 <= month2;) {
if (month1 == month2) {
sum += (day2 - day1); goto Loop3;
}
switch (month2)
{
case 12: case 10: case 8: case 7:case 5:case 3:case 1:
{sum += day2; month2 == 3 ? day2 = 28 : day2 = 30; month2--; }; break;
default: {sum += day2; day2 = 31; month2--; }; break;
}
}
}
else if (year1 < year2) { //第四种:年份不同
Loop1:
for (;month2>=1;) {
switch (month2) {
case 12: case 10: case 8: case 7:case 5:case 3:case 1:
{sum += day2; month2 == 3 ?((year2 % 400 == 0 || (year2 % 4 == 0 && year2 % 100 != 0)) ?day2=29:day2 = 28) :(month2==1?day2=31: day2 = 30); month2--; }; break;
default: {sum += day2; day2 = 31; month2--; }; break;
}
}
year2--;
month2 = 12;
if (year2 > year1)
goto Loop1;
else goto Loop2;
}
Loop3:
printf("相差%d天\n", sum);
system("pause");
return 0;
}
短代码版:
#include<stdio.h>
#include<stdlib.h>
int is_闰年(int year) {
if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0)
return 1;
else return 0;
}
int main() {
int a[13] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 },year1,year2,month1,month2,day1,day2,book=0;
scanf_s("%d %d %d", &year1, &month1, &day1);
scanf_s("%d %d %d", &year2, &month2, &day2);
for (;year1<year2||month1<month2||day1<day2;book++){
day1++;
if (month1 == 12&&day1>a[12]){
year1++; month1 = 1; day1 = 1; continue;
}
if (month1 != 2 && day1 > a[month1]) {
month1++; day1 = 1; continue;
}
if (month1 == 2) {
if (is_闰年(year1)&&day1>a[month1]+1){
month1++; day1 = 1; continue;
}
if (!is_闰年(year1) && day1 > a[month1]) {
month1++; day1 = 1; continue;
}
}
}
printf("%d\n", book);
getchar(); getchar();
return 0;
}