C语言代码:将2020年1月1日作为计数起点,根据输入的计数值获取日期和星期
#include <stdio.h>
// 定义结构体表示日期 struct Date { int year; int month; int day; int weekday; };
// 计算某年是否为闰年 int isLeapYear(int year) { if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) { return 1; } else { return 0; } }
// 计算某月的天数 int getDaysOfMonth(int year, int month) { int daysOfMonth[12] = {31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}; if (month == 2 && isLeapYear(year)) { return 29; } else { return daysOfMonth[month - 1]; } }
// 根据计数值获取日期 void getDate(int count, struct Date *date) { date->year = 2020; date->month = 1; date->day = 1; date->weekday = 3;
while (count > 1) {
int daysOfMonth = getDaysOfMonth(date->year, date->month);
if (count <= daysOfMonth) {
date->day += count;
date->weekday = (date->weekday + count - 1) % 7;
count = 0;
} else {
count -= daysOfMonth;
date->month++;
if (date->month > 12) {
date->year++;
date->month = 1;
}
date->day = 1;
date->weekday = (date->weekday + daysOfMonth) % 7;
}
}
}
// 输出日期 void printDate(struct Date *date) { char *weekdays[7] = {"星期日", "星期一", "星期二", "星期三", "星期四", "星期五", "星期六"}; printf("%d年%d月%d日-%s\n", date->year, date->month, date->day, weekdays[date->weekday]); }
int main() { int count; printf("请输入一个1~366之间的整数:"); scanf("%d", &count);
if (count < 1 || count > 366) {
printf("输入有误,请重新运行程序并输入正确的数值。\n");
return 1;
}
struct Date date;
getDate(count, &date);
printDate(&date);
return 0;
}
原文地址: https://www.cveoy.top/t/topic/pbMn 著作权归作者所有。请勿转载和采集!