本文已参与「新人创作礼」活动,一起开启掘金创作之路。
废话不多说,上代码
通过传入year,month,day来获取天数
int getDay(int y, int m, int d) {
int rtnDay = d;
int day[] = { 31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30 };
int moon = !(y % 4) && y % 100 || !(y % 400);
day[1] = 28 + moon;
for (size_t i = 0; i < m - 1; i++) {
rtnDay += day[i];
}
return rtnDay;
}
数组day储存的是每一个月有多少天,moon变量计算当前年份是否为闰年,那么思路就很清晰了
- 计算当前是否为闰年
- 如果为闰年,则二月增加1天,反之不增加
- 计算目的月份的前一个月之前的所有天数之和
- 加上目的月份的当前天数
- 返回计算后的当年天数
通过定义结构体返回天数 首先定义一个Date结构体
typedef struct Date {
int year;
int month;
int day;
} Date;
然后是结构体版的代码
int getDay(Date * d) {
int rtnDay = d->day;
int day[] = { 31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30 };
int moon = !(d->year % 4) && d->year % 100 || !(d->year % 400);
day[1] = 28 + moon;
for (size_t i = 0; i < d->month - 1; i++) {
rtnDay += day[i];
}
return rtnDay;
}
总代码
#include <stdio.h>
typedef struct Date {
int year;
int month;
int day;
} Date;
int getDay(Date * d);
int main() {
Date d = { 2013, 3, 1 };
printf("%d\n", getDay(&d));
return 0;
}
int getDay(Date * d) {
int rtnDay = d->day;
int day[] = { 31, 28, 31, 30, 31, 30, 31, 31,30, 31, 30 };
int moon = !(d->year % 4) && d->year % 100 || !(d->year % 400);
day[1] = 28 + moon;
for (size_t i = 0; i < d->month - 1; i++) {
rtnDay += day[i];
}
return rtnDay;
}