这是问题http://ac.jobdu.com/problem.p...
#include <stdio.h>
#include <time.h>
#include <stdlib.h>
int main()
{
struct tm t1;
struct tm t2;
int y1, m1, d1;
int y2, m2, d2;
while(scanf("%4d%2d%2d", &y1, &m1, &d1) != EOF) {
scanf("%4d%2d%2d", &y2, &m2, &d2);
t1.tm_mday = d1;
t1.tm_mon = m1;
t1.tm_mon--;
t1.tm_year = y1;
t1.tm_year -= 1900;
t2.tm_mday = d2;
t2.tm_mon = m2;
t2.tm_mon--;
t2.tm_year = y2;
t2.tm_year -= 1900;
t1.tm_sec = 0;
t1.tm_min = 0;
t1.tm_hour = 0;
t1.tm_isdst = -1;
t2.tm_sec = 0;
t2.tm_min = 0;
t2.tm_hour = 0;
t2.tm_isdst = -1;
int k1 = mktime(&t1);
int k2 = mktime(&t2);
int k3 = (k1 - k2) / 3600 / 24;
if (k3 < 0) {
k3 = -k3;
}
printf("%d\n", k3 + 1);
}
return 0;
}
我自己电脑上运行正确,可OJ无法通过,求大神指教。
这个题目出真是简单粗暴。
不建议用mktime,因为mktime有时间范围限制,如果时间表示不了,会返回-1的。
比如32位Linux中,只能到2038年,64位的则可以到3000年。
此外有些实现(如VC++)对于Unix Epoch(1970年1月1日午夜)之前的时间会也会返回-1。
所以你最好还是自己处理。题目的意思应该是让你把年月日分别相减,并相互借位。
其实这道题仔细追究会有很多问题的,毕竟不严谨。
比如公元46年到1582年使用的是儒略历,之后用的是格高里历,两者切换的1582年10月份,有些日期其实是不存在的等。