关于求两个日期之间相距的天数,C/C++
我的程序达不到预期的效果,麻烦大家帮我看一下了,谢谢!#include<iostream>usingnamespacestd;structDay{intyear;intm...
我的程序达不到预期的效果,麻烦大家帮我看一下了,谢谢!
#include<iostream>
using namespace std;
struct Day
{
int year;
int month;
int day;
}x,y;
void Ready()
{
cout<<"请输入一个日期:"<<endl;
cin>>x.year>>x.month>>x.day;
cout<<"请输入一个日期:"<<endl;
cin>>y.year>>y.month>>y.day;
}
double SW(int month,double days)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days+=31;break;
case 4:
case 6:
case 9:
case 11:days+=30;break;
case 2:days+=28;break;
default:cout<<"Error!"<<endl;break;
}
return days;
}
double Days(Day x,Day y)
{
int i;
double days=y.day;
days-=x.day;
if((x.year==y.year)&&(x.month==y.month)&&(x.day==y.day))
return 0;
if(x.year>y.year||((x.year==y.year)&&(x.month>y.month))||((x.year==y.year)&&(x.month==y.month)&&(x.day>y.day)))
{
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month<=2)
days++;
for(i=x.month;i<=12;i++)
days=SW(i,days);
if(x.year-y.year>1)
for(i=x.year+1;i<y.year;i++)
if(i%400==0||(i%100!=0&&i%4==0))
days+=366;
else
days+=365;
return days;
}
else
return Days(y,x);
}
void Show(double n)
{
cout<<n<<endl;
}
void main()
{
Ready();
Show(Days(x,y));
} 展开
#include<iostream>
using namespace std;
struct Day
{
int year;
int month;
int day;
}x,y;
void Ready()
{
cout<<"请输入一个日期:"<<endl;
cin>>x.year>>x.month>>x.day;
cout<<"请输入一个日期:"<<endl;
cin>>y.year>>y.month>>y.day;
}
double SW(int month,double days)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days+=31;break;
case 4:
case 6:
case 9:
case 11:days+=30;break;
case 2:days+=28;break;
default:cout<<"Error!"<<endl;break;
}
return days;
}
double Days(Day x,Day y)
{
int i;
double days=y.day;
days-=x.day;
if((x.year==y.year)&&(x.month==y.month)&&(x.day==y.day))
return 0;
if(x.year>y.year||((x.year==y.year)&&(x.month>y.month))||((x.year==y.year)&&(x.month==y.month)&&(x.day>y.day)))
{
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month<=2)
days++;
for(i=x.month;i<=12;i++)
days=SW(i,days);
if(x.year-y.year>1)
for(i=x.year+1;i<y.year;i++)
if(i%400==0||(i%100!=0&&i%4==0))
days+=366;
else
days+=365;
return days;
}
else
return Days(y,x);
}
void Show(double n)
{
cout<<n<<endl;
}
void main()
{
Ready();
Show(Days(x,y));
} 展开
4个回答
展开全部
改四个地方:
1)
double days=y.day;
days-=x.day;
改成
double days=x.day;
days-=y.day;
2)
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month<=2)
改成
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month>2)
3)
for(i=x.month;i<=12;i++)
改成
for(i=y.month;i<x.month;i++)
4)
if(x.year-y.year>1)
for(i=x.year+1;i<y.year;i++)
改成
if(x.year-y.year>=1)
for(i=y.year;i<x.year;i++)
这是我找出来的错误,估计别的地方还有错误。
附修改后的完整代码
#include<iostream>
using namespace std;
struct Day
{
int year;
int month;
int day;
}x,y;
void Ready()
{
cout<<"请输入一个日期:"<<endl;
cin>>x.year>>x.month>>x.day;
cout<<"请输入一个日期:"<<endl;
cin>>y.year>>y.month>>y.day;
}
double SW(int month,double days)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days+=31;break;
case 4:
case 6:
case 9:
case 11:days+=30;break;
case 2:days+=28;break;
default:cout<<"Error!"<<endl;break;
}
return days;
}
double Days(Day x,Day y)
{
int i;
double days=x.day;
days-=y.day;
if((x.year==y.year)&&(x.month==y.month)&&(x.day==y.day))
return 0;
if(x.year>y.year||((x.year==y.year)&&(x.month>y.month))||((x.year==y.year)&&(x.month==y.month)&&(x.day>y.day)))
{
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month>2)
days++;
for(i=y.month;i<x.month;i++)
days=SW(i,days);
if(x.year-y.year>=1)
{
for(i=y.year;i<x.year;i++)
{
if(i%400==0||(i%100!=0&&i%4==0))
days+=366;
else
days+=365;
}
}
return days;
}
else
return Days(y,x);
}
void Show(double n)
{
cout<<n<<endl;
}
void main()
{
Ready();
Show(Days(x,y));
}
1)
double days=y.day;
days-=x.day;
改成
double days=x.day;
days-=y.day;
2)
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month<=2)
改成
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month>2)
3)
for(i=x.month;i<=12;i++)
改成
for(i=y.month;i<x.month;i++)
4)
if(x.year-y.year>1)
for(i=x.year+1;i<y.year;i++)
改成
if(x.year-y.year>=1)
for(i=y.year;i<x.year;i++)
这是我找出来的错误,估计别的地方还有错误。
附修改后的完整代码
#include<iostream>
using namespace std;
struct Day
{
int year;
int month;
int day;
}x,y;
void Ready()
{
cout<<"请输入一个日期:"<<endl;
cin>>x.year>>x.month>>x.day;
cout<<"请输入一个日期:"<<endl;
cin>>y.year>>y.month>>y.day;
}
double SW(int month,double days)
{
switch(month)
{
case 1:
case 3:
case 5:
case 7:
case 8:
case 10:
case 12:days+=31;break;
case 4:
case 6:
case 9:
case 11:days+=30;break;
case 2:days+=28;break;
default:cout<<"Error!"<<endl;break;
}
return days;
}
double Days(Day x,Day y)
{
int i;
double days=x.day;
days-=y.day;
if((x.year==y.year)&&(x.month==y.month)&&(x.day==y.day))
return 0;
if(x.year>y.year||((x.year==y.year)&&(x.month>y.month))||((x.year==y.year)&&(x.month==y.month)&&(x.day>y.day)))
{
if((x.year%400==0||(x.year%100!=0&&x.year%4==0))&&x.month>2)
days++;
for(i=y.month;i<x.month;i++)
days=SW(i,days);
if(x.year-y.year>=1)
{
for(i=y.year;i<x.year;i++)
{
if(i%400==0||(i%100!=0&&i%4==0))
days+=366;
else
days+=365;
}
}
return days;
}
else
return Days(y,x);
}
void Show(double n)
{
cout<<n<<endl;
}
void main()
{
Ready();
Show(Days(x,y));
}
展开全部
int f(int y, int m)
{
if (m<3) return y-1;
return y;
}
int g(int m)
{
if (m<3) return m+13;
return m+1;
}
N=1461*f(y,m)/4+153*g(m)/5+d
计算两个日期相隔多少天:
N1=1461*f(y1,m1)/4+153*g(m1)/5+d1
N2=1461*f(y2,m2)/4+153*g(m2)/5+d2
N2-N1 就是相隔天数
计算y年m月d日星期几:
N=1461*f(y,m)/4+153*g(m)/5+d
(N-621049)%7 就是星期
{
if (m<3) return y-1;
return y;
}
int g(int m)
{
if (m<3) return m+13;
return m+1;
}
N=1461*f(y,m)/4+153*g(m)/5+d
计算两个日期相隔多少天:
N1=1461*f(y1,m1)/4+153*g(m1)/5+d1
N2=1461*f(y2,m2)/4+153*g(m2)/5+d2
N2-N1 就是相隔天数
计算y年m月d日星期几:
N=1461*f(y,m)/4+153*g(m)/5+d
(N-621049)%7 就是星期
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
算法是错误的。
我试验的数据数据是 2007 05 31 和 2007 06 02
测试结果是243天。
你主要的计算是通过days(x,y);其中x 要比 y的时间大(晚)。
“for(i=x.month;i<=12;i++)
days=SW(i,days);
”
在我的测试数据中,这段 计算没有道理,或者你的条件划分还不够清晰。(汗,没看懂你的意图~~~)
总:这个算法感觉不够清晰。
提供一条思路。系统内的时间有专门的函数,你可以先把你的时间转换为系统标准的格式,然后再进行计算差距,再转换回来你需要的格式。仅供参考。
我试验的数据数据是 2007 05 31 和 2007 06 02
测试结果是243天。
你主要的计算是通过days(x,y);其中x 要比 y的时间大(晚)。
“for(i=x.month;i<=12;i++)
days=SW(i,days);
”
在我的测试数据中,这段 计算没有道理,或者你的条件划分还不够清晰。(汗,没看懂你的意图~~~)
总:这个算法感觉不够清晰。
提供一条思路。系统内的时间有专门的函数,你可以先把你的时间转换为系统标准的格式,然后再进行计算差距,再转换回来你需要的格式。仅供参考。
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
有个函数有问题,你追加50悬赏分,我给你改出来
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询