两个日期之间相差的天数

长代码版:

​
#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;
}

猜你喜欢

转载自blog.csdn.net/qq_43746332/article/details/88937547