给定年月日 怎样用C语言编程计算2个日期之间的时间天数

其实是一道ACM的题目,计算天数的代码是不是很长很复杂额...题目如下:Description有一种细菌,它每天都会分裂一次。例如:第一天有1个,第二天就有2个,第三天就... 其实是一道ACM的题目,计算天数的代码是不是很长很复杂额...
题目如下:
Description

有一种细菌,它每天都会分裂一次。例如:第一天有1个,第二天就有2个,第三天就
变成4个,……。现在告诉你第一天的日期和细菌个数,要求你编写一段程序计算将来某一
天细菌的数目。

Input

输入数据分为3行。
第一行是一个整数,代表细菌第一天的数目。
第二行是第一天的日期,格式见示例。
第三行是目标日期,格式和第二行相同。

Output

输出只有一行,即要求的那一天的细菌数(这个数字可能很大,最大有1000位)。

Sample Input

1
2009-01-01
2009-01-08

Sample Output

128
展开
 我来答
Ctr_Alt_
2010-07-20 · TA获得超过556个赞
知道小有建树答主
回答量:538
采纳率:100%
帮助的人:502万
展开全部
问题不难。
思路如下:
1. 要判断时间的合法性(如果不想判断也可以)
参考资料:(使用的是C++,修改之后TC下也可运行,主要是看思路)
http://hi.baidu.com/ctralt/blog/item/ee937c167e87db4b21a4e96b.html

2. 判断两个日期之间的天数
判断输入的年份是不是闰年;年份是否相同;月份是否相同;日是否相同?
同年同月最好计算,日数相减就出来了;同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加;关键是不同年的日期计算:先计算中间相隔几年,这几年的天数就出来了,再计算小的日期到年底有多少天,其次计算大的日期距年初有多少天,三个数相加就可以了。
参考资料:(也是用C++编写的,你可以把类修改为结构体,一样可以使用)
http://zhidao.baidu.com/question/55367386

以下为计算两个日期之间天数的代码:
/* 返回绝对值 */
int abs(int a,int b)
{
if(a>=b)
return (a-b);
else
return (b-a);
}

/* 判断是否为闰年:是,返回 1 ; 不是, 返回 0 . */
int IsLeap(int year)
{
if(((year%4==0)&&(year%100!=0))||year%400==0)
return 1;
else
return 0;
}

/* 判断某个日期从年初(y年1月1日)到该天(y年m月d日)的天数 */
int Days(int y,int m,int d)
{
int days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int i;
int sum = 0 ; /* 计算天数 */
if(IsLeap(y)) /* 如果为闰年,2月有 29 天 */
days[2] = 29 ;
for(i=0;i<m;i++)
sum = sum +days[i] ;
sum = sum + d - 1 ;
return sum;
}

/*
判断两个日期之间的天数.
日期一:年 y1,月 m1,日 d1;
日期一:年 y2,月 m2,日 d2;
*/
int DiffDays(int y1,int m1,int d1,int y2,int m2,int d2)
{
int s1,s2; /* 计算两个日期从年初到该日期的天数 */
int count; /* 计算两个年份之间的差值 */
int sum=0; /* */
int t,t1,t2;
if(y1==y2)
{
s1 = Days(y1,m1,d1);
s2 = Days(y2,m2,d2);
return abs(s1,s2);
}
else if(y1>y2)
{
count = y1 - y2 ;
if(count == 1)
{
t1 = Days(y1,m1,d1);
t2 = Days(y2,12,31) - Days(y2,m2,d2);
return (t1+t2+count);
}
else
{
for(t = y2+1;t<y1;t++)
sum = sum + Days(t,12,31);
cout<<sum<<endl;
t2 = Days(y2,12,31) - Days(y2,m2,d2);
t1 = Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}
else
{
count = y2 - y1 ;
if(count == 1)
{
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (t1+t2+count);
}
else
{
for(t = y1+1;t<y2;t++)
sum = sum + Days(t,12,31);
t2 = Days(y2,m2,d2);
t1 = Days(y1,12,31) - Days(y1,m1,d1);
return (sum+t1+t2+count);
}

}

}

/*
以上代码在Viusal C++ 6.0 编译下通过,TC下也可以通过。
使用DiffDays(int,int,int,int,int,int)这个函数就可计算出两个日期之间的天数.
至于日期的合法性,没有进行判断;也就是说,你如果输入一个不合法的日期,计算出来的结果是不正确的;如果是合法日期,那就没问题。
*/
问怀绿钮恨
2010-07-23 · TA获得超过3万个赞
知道大有可为答主
回答量:1.1万
采纳率:30%
帮助的人:874万
展开全部
问题不难。
思路如下:
1.
要判断时间的合法性(如果不想判断也可以)
参考资料:(使用的是C++,修改之后TC下也可运行,主要是看思路)
http://hi.baidu.com/ctralt/blog/item/ee937c167e87db4b21a4e96b.html
2.
判断两个日期之间的天数
判断输入的年份是不是闰年;年份是否相同;月份是否相同;日是否相同?
同年同月最好计算,日数相减就出来了;同年不同月也好计算,计算中间相隔几个月,转换成天数,小的日期距月底有多少天,大的日期距月初多少天,三个数相加;关键是不同年的日期计算:先计算中间相隔几年,这几年的天数就出来了,再计算小的日期到年底有多少天,其次计算大的日期距年初有多少天,三个数相加就可以了。
参考资料:(也是用C++编写的,你可以把类修改为结构体,一样可以使用)
http://zhidao.baidu.com/question/55367386
以下为计算两个日期之间天数的代码:
/*
返回绝对值
*/
int
abs(int
a,int
b)
{
if(a>=b)
return
(a-b);
else
return
(b-a);
}
/*
判断是否为闰年:是,返回
1
;
不是,
返回
0
.
*/
int
IsLeap(int
year)
{
if(((year%4==0)&&(year%100!=0))||year%400==0)
return
1;
else
return
0;
}
/*
判断某个日期从年初(y年1月1日)到该天(y年m月d日)的天数
*/
int
Days(int
y,int
m,int
d)
{
int
days[]={0,31,28,31,30,31,30,31,31,30,31,30,31};
int
i;
int
sum
=
0
;
/*
计算天数
*/
if(IsLeap(y))
/*
如果为闰年,2月有
29

*/
days[2]
=
29
;
for(i=0;i<m;i++)
sum
=
sum
+days[i]
;
sum
=
sum
+
d
-
1
;
return
sum;
}
/*
判断两个日期之间的天数.
日期一:年
y1,月
m1,日
d1;
日期一:年
y2,月
m2,日
d2;
*/
int
DiffDays(int
y1,int
m1,int
d1,int
y2,int
m2,int
d2)
{
int
s1,s2;
/*
计算两个日期从年初到该日期的天数
*/
int
count;
/*
计算两个年份之间的差值
*/
int
sum=0;
/*
*/
int
t,t1,t2;
if(y1==y2)
{
s1
=
Days(y1,m1,d1);
s2
=
Days(y2,m2,d2);
return
abs(s1,s2);
}
else
if(y1>y2)
{
count
=
y1
-
y2
;
if(count
==
1)
{
t1
=
Days(y1,m1,d1);
t2
=
Days(y2,12,31)
-
Days(y2,m2,d2);
return
(t1+t2+count);
}
else
{
for(t
=
y2+1;t<y1;t++)
sum
=
sum
+
Days(t,12,31);
cout<<sum<<endl;
t2
=
Days(y2,12,31)
-
Days(y2,m2,d2);
t1
=
Days(y1,m1,d1);
return
(sum+t1+t2+count);
}
}
else
{
count
=
y2
-
y1
;
if(count
==
1)
{
t2
=
Days(y2,m2,d2);
t1
=
Days(y1,12,31)
-
Days(y1,m1,d1);
return
(t1+t2+count);
}
else
{
for(t
=
y1+1;t<y2;t++)
sum
=
sum
+
Days(t,12,31);
t2
=
Days(y2,m2,d2);
t1
=
Days(y1,12,31)
-
Days(y1,m1,d1);
return
(sum+t1+t2+count);
}
}
}
/*
以上代码在Viusal
C++
6.0
编译下通过,TC下也可以通过。
使用DiffDays(int,int,int,int,int,int)这个函数就可计算出两个日期之间的天数.
至于日期的合法性,没有进行判断;也就是说,你如果输入一个不合法的日期,计算出来的结果是不正确的;如果是合法日期,那就没问题。
*/
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
荣俊逸泷颖
2018-11-29 · TA获得超过3万个赞
知道大有可为答主
回答量:1.2万
采纳率:28%
帮助的人:843万
展开全部
#include<stadio.h>
main()
{
int
year,year1,month,month1,day,day1,age;
printf("请输入您的生日:");
scanf("%d
%d
%d",&year,&month,&day);
printf("请输入当前日期:");
scanf("%d
%d
%d",&year1,&month1,&day1);
if(year1==year)
age=0;
else
{age=year1-year;
if(month1<month||(month1==month&&day1<day))
age=age-1;
}
printf("您的年龄是:%d",age);
}
大概就是这个样子,我没有调试,可能有错误,但应该都是小问题,你自己调试一下,觉得哪儿不妥,可以自己改动。
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
adfort
2010-07-19 · TA获得超过763个赞
知道小有建树答主
回答量:219
采纳率:0%
帮助的人:98.5万
展开全部
直接算两个日期距离公元元年1月1日的天数:

若干个完整的年,若干个完整的月,若干天,加起来之后两个天数相减就行了.

日期的合法性,闰年之类的就不罗嗦了.
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(2)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式