计算天数
本帖最后由 阿撩 于 2016-12-13 21:45 编辑#include <stdio.h>
long sum(int y,int m,int d)
{
int x={0,31,28,31,30,31,30,31,31,30,31,30,31};
long i,s=0;
for(i=1;i<y;i++)
{
if(i%4==0&&i%100!=0||i%400==0)
{
s+=366;
}
else s+=365;
}
for(i=1;i<m;i++)
{
s+=x;
}
s+=d;
return s;
}
void main()
{
int y1,m1,d1,y2,m2,d2;
long s1,s2;
printf("输入年 月 日:");
scanf("%d%d%d",&y1,&m1,&d1);
printf("输入年 月 日:");
scanf("%d%d%d",&y2,&m2,&d2);
s1=sum(y1,m1,d1);
s2=sum(y2,m2,d2);
printf("相差天数:%ld\n",s2-s1);
}
求问这个程序哪里出问题了呢?
输入:2010 10 26
输入:2016 12 13
程序运行出来如图:是2239天
但是我自己手算了一下发现是2040天
求问这是怎么回事? 首先,文中写错了,应该是2240天。
其次,闰年二月有29天!!!也就说计算s2时少加了2016年二月的第29天。
如果前后都是平年的话就没问题了。 给函数加个判断即可
参数为闰年时x〔3〕=29 zzzz76 发表于 2016-12-14 02:31
给函数加个判断即可
参数为闰年时x〔3〕=29
可是我在判断它为闰年的时候加得就是366天,而不是闰年加得是365天,已经把二月给算进去了,不是么? 闰年2月只有29天 风吹雨起#泪花落 发表于 2016-12-14 00:27
首先,文中写错了,应该是2240天。
其次,闰年二月有29天!!!也就说计算s2时少加了2016年二月的第29天。 ...
嗯嗯 写错了 不好意思 是2240天。
但是我已经给出条件如果是闰年就加366天了 已经把二月的29天算进去了 不是么? 阿撩 发表于 2016-12-15 19:37
嗯嗯 写错了 不好意思 是2240天。
但是我已经给出条件如果是闰年就加366天了 已经把二月的29天算进去了...
我知道的,可是!!你只加到2015年,2016这年你只按月和天加了,并未按年(366天)加,所以我才说如果前后都是平年就没问题了!
当然了,三楼也是对的,你可以再思考一下。
页:
[1]