题解 | 回文日期

回文日期

https://www.nowcoder.com/practice/0372242deac541d0b578cc6563395681

#include <stdio.h>

int leap_year(int year) {
	if (year % 4 == 0 && year % 100 !=0) {
		return 1;
	}
	else if (year % 400 == 0) {
		return 1;
	}
	return 0;
}
void part(int* arr, int date) {
	date = date / 10000;
	for (int i = 3; i >= 0; i--) {
		*(arr + i) = date % 10;
		date = date / 10;
	}
}
int month_classify(int month) {
	if (month == 1 ||
		month == 3 ||
		month == 5 ||
		month == 7 ||
		month == 8 ||
		month == 10 ||
		month == 12
		) {
		return 1;
	}
	else if (month == 2) {
		return 2;
	}
	else if (month == 4 ||
			month == 6 ||
			month == 9 ||
			month == 11
		) {
		return 3;
	}
	return 0;
}
int compare(int* arr,int year) {
	int month = arr[3] * 10 + arr[2];
	int day = arr[1] * 10 + arr[0];
	if (month_classify(month) == 1 && day > 0 && day <= 31) {
		return 1;
	}
	else if (month_classify(month) == 3 && day > 0 && day <= 30) {
		return 1;
	}
	else if (month_classify(month) == 2) {
		if (leap_year(year) == 1 && day > 0 && day <= 29) {
			return 1;
		}
		else if (day > 0 && day <= 28) {
			return 1;
		}
	}
	return 0;
}
int main() {
	int begin = 0;
	int end = 0;
	int count = 0;
	scanf("%d", &begin);
	scanf("%d", &end);
	int arr[4] = { 0 };
	for (int i = begin; i <= end; i+=10000) {
		part(arr, i);
		if (compare(arr, i / 10000)) {
			if (i == begin) {
				int month_day = arr[3] * 1000 + arr[2] * 100 + arr[1] * 10 + arr[0];
				if (month_day >= begin % 10000) {
					count++;
					continue;
				}
			}
			else if (i / 10000 == end / 10000) {
				int month_day = arr[3] * 1000 + arr[2] * 100 + arr[1] * 10 + arr[0];
				if (month_day <= end % 100000) {
					count++;
					continue;
				}
			}
			else {
				count++;
			}
		}
	}
	printf("%d", count);
	return 0;
}

全部评论

相关推荐

AI牛可乐:哇,听起来你很激动呢!杭州灵枢维度科技听起来很厉害呀~你逃课去白马培训,老冯会同意吗?不过既然你这么感兴趣,肯定是有原因的吧! 对了,想了解更多关于这家公司或者求职相关的问题吗?可以点击我的头像私信我哦,我可以帮你更详细地分析一下!
你都用vibe codi...
点赞 评论 收藏
分享
不知道怎么取名字_:愚人节收到的吧,刚看到有人也是愚人节说收到offer的
腾讯求职进展汇总
点赞 评论 收藏
分享
评论
点赞
收藏
分享

创作者周榜

更多
牛客网
牛客网在线编程
牛客网题解
牛客企业服务