1)根据距离2000-1-1的天数,算出日期
2)计算自己活了多少天
3)题目:输入某年某月某日,判断这一天是这一年的第几天?
吐槽:题目不难,但是真的很烦人
/*
思路:首先抽象出两个函数 判断某年是不是闰年,通过得到年月日计算这是本年的第几天
第一问:起始年是2000年 首先看拿到的日期days是不是大于366 年份加一 然后日期数days-366 通过判断是不是闰年的函数控制减量s是365还是366
直到days不大于s这样就把年数算完了 也拿到了还剩下的days 判断days是否大于一月天数months[i] i+1 天数剪掉当月天数
直到days不大于某个月天数months[i] 也拿到剩下的天数 那就是日期数
输出year i+1 days i+1是因为i从0开始计数
第二问:分三部分 出身年活的天数+到2019年为止的天数+2019已经过了天数 当出生年小于现在年份的时候,
直接用365+IsRun(bYear)-出生年日期前的天数GetDay(bYear,bMonth,bDay) 当bYear<nYear 累加365和闰年那天 GetDay(nYear,nMonth,nDay)
如果出生年和现在是同一年 只需要用现在日期是本年第几天-出生日期是本年第几天就行
第三问:编写函数GetDay() 形式参数就是输入的年月日 只要将月份一个个加上去就行了 循环次数是月份数少一
*/
#include<stdio.h>
int IsRun(int year){
if (year % 4 == 0 && year != 100 || year % 400 == 0){
return 1;
}
else{
return 0;
}
}
int GetDay(int year,int month,int day){
int s = 0;
int months[12] = { 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31 };
months[1] += IsRun(year);
for (int i = 0; i < month-1; i++){//这里判断条件不能使用12 因为并不是加上一整年 而是循环加上你给定的月份-1
s += months[i];
}
s += day;
return s;
}
void Day(int days){
int year = 2000;
int month = 1;
int day = 1;
int s = 366;//因为2000年是闰年
while (days > s){
if (IsRun(year) == 1){
s = 366;
}
else{
s = 355;
}
year++;
days -= s;
}
int months[12] = {31,28,31,30,31,30,31,31,30,31,30,31};
months[1] += IsRun(year);
int i = 0;
while (days > months[i]){
i++;
days -= months[i++];
}
printf("%d %d %d",year,i+1,days);
}
int lives(){
int bYear =1996;
int bMonth = 11;
int bDay = 4;
int nYear = 2019;
int nMonth = 3;
int nDay = 15;
int s = 0;
if (bYear < nYear){
//1996-1997多少天
s += 365 + IsRun(bYear);
s -= GetDay(bYear, bMonth, bDay);
bYear++;
//1997-2018多少天
while (bYear < nYear){
s += 365 + IsRun(bYear++);
}
//2019已经多少天
s += GetDay(nYear, nMonth, nDay);
}
else if (bYear == nYear){
s += GetDay(nYear, nMonth, nDay);
s -= GetDay(bYear, bMonth, bDay);
}
return s;
}
int main(){
//Day(367);
/*int k = GetDay(2019, 3, 15);
printf("%d",k);*/
printf("%d", lives());
return 0;
}