计算到达18岁生日所经过的总天数
Problem DescriptionGardon的18岁生日就要到了,他当然很开心,可是他突然想到一个问题,是不是每个人从出生开始,到达18岁生日时所经过的天数都是一样的呢?似乎并不全都是这样,所以他想请你帮忙计算一下他和他的几个朋友从出生到达18岁生日所经过的总天数,让他好来比较一下。Input一个数T,后面T行每行有一个日期,格式是YYYY-MM-DD。如我的生日是1988-03-07。
OutputT行,每行一个数,表示此人从出生到18岁生日所经过的天数。如果这个人没有18岁生日,就输出-1。
Sample Input
11988-03-07
Sample Output
6574
新手求解 最好能有详细的注释
谢谢各位大神{:7_139:} (出生时间戳-生日时间戳)/(60*60*24) 会魔法的魔法 发表于 2016-11-30 11:31
(出生时间戳-生日时间戳)/(60*60*24)
我试试{:10_291:} 会魔法的魔法 发表于 2016-11-30 11:31
(出生时间戳-生日时间戳)/(60*60*24)
我还没学时间戳 有没有别的方法呀{:9_228:} 给你一个思路
你可以以数组的形式建立一个年历表{:10_256:}
/*1、年份能被4整除;
2、年份若是100的整数倍的话,需被400整除,否则是平年
*/
#include <stdio.h>
#include <stdlib.h>
int main(){
int a;
int b = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};/* 平年月历表 */
int year1, mouth1, day1; /* 起始日期 */
int year2, mouth2, day2; /* 结束日期 */
int count1 = 0; /* 计数器 */
int count2 = 0;
//建立一个年历表
for(int i = 1; i <=2016; i++){
if(i%100 == 0){
if(i%400 == 0){
a = 366;
}
else{
a = 365;
}
}
else{
if(i%4 == 0){
a = 366;
}
else{
a = 365;
}
}
}
printf("请输入开始日期(xxxx-xx-xx):");
scanf("%d-%d-%d", &year1, &mouth1, &day1);
if(a == 366){
b = 29; /* 根据平年还是闰年修改月历表 */
}
else{
b = 28;
}
if(day1 > b){
printf("该日期不存在");
exit(-1); /* 结束 */
}
for(int i = 1; i < mouth1; i++){ /* 从开始年份的第一天到开始日期的天数 */
count1 += b;
}
count1 += day1;
printf("请输入结束日期(xxxx-xx-xx):");
scanf("%d-%d-%d", &year2, &mouth2, &day2);
if(a == 366){
b = 29;
}
else{
b = 28;
}
if(day2 > b){
printf("该日期不存在");
exit(0);
}
for(int i = year1; i < year2; i++){ /* 从开始年份的第一天到结束日期的天数*/
count2 += a;
}
for(int i = 1; i < mouth2; i++){
count2 += b;
}
count2 += day2;
printf("中间间隔的天数:%d", count2 - count1);
return 0;
}
原来有人4年过一轮生日........ 其实还有另外一种方式:18岁的生日的话,期间一定会有3个完整的4年(把4年做一个周期),然后处理一下头尾的规律……下午帮你算的时候,算到最后才发现原来这个题目对18岁生日的定义是你出生的日期到第一个生日算一岁,而不是法律上的定义{:10_247:}所以楼主自己搞喽 DarkSE 发表于 2016-11-30 23:47
其实还有另外一种方式:18岁的生日的话,期间一定会有3个完整的4年(把4年做一个周期),然后处理一下头尾 ...
{:10_266:} 我找到答案了 {:10_266:}
计算方法:
<1>、将出生年经过的天数与18岁那年经过的天数加在一起算作一年。
<2>、不算闰年,则18年共度过18*365天。
<3>、考虑闰年,出生年与18岁生日合在一起那年单独考虑,其他年份只要是闰年,总天数加1天即可。
<4>、单独考虑合在一起年份,若出生年是闰年,且在2月29日之前出生,那么他(她)必定经过2月29日这天,总天数加1;对于18岁那年,若是闰年,且在2月28日之后出生的,他(她)同样经过2月29这天,总天数加1.
页:
[1]