【求助】日期计算不正确
本帖最后由 fpkoko 于 2012-12-14 09:34:27 编辑
#include<iostream>
#include<string>
using namespace std;
struct Rq{
unsigned int y;
unsigned int m;
unsigned int d;
};
Rq input(Rq& s){
cout<<"input year:";
cin>>s.y;
cout<<"input month:";
cin>>s.m;
cout<<"input day:";
cin>>s.d;
return s;
}//input year.month.day
bool year(Rq s){
if(s.y%4==0&&(s.y%400==0||s.y%100!=0))
return true;
else
return false;
}
int day(Rq s){
int num=0;
int N=s.y;
for(int i=0;i<N;i++){
if(year(s))
num+=366;
else
num+=365;
}
return num;
}//year'day;
int now(Rq s){
int num=0;
int N=s.m-1;
int days[]={31,28,31,30,31,30,31,31,30,31,30,31};
if(year(s)&&s.m==2)
days[1]=29;
for(int i=0;i<N;i++){
num+=days[i];
}
num+=s.d;
return num;
}
void zj(int num){
string z[]={"monday","tuesday","wednesday","thursday","friday","saturday","sunday"};
cout<<"this day is "<<z[num%7]<<endl;
}
int main(){
Rq a={0,0,0};
Rq b={0,0,0};
input(a);
input(b);
int ad=day(a)+now(a);
int bd=day(b)+now(b);
cout<<"a-b="<<ad-bd<<endl;
zj(ad);
zj(bd);
return 0;
}
int day(Rq s){
int num=0;
int N=s.y;
for(int i=0;i<N;i++){
if(year(s))//===========>你是计算从0年到2012年的天数,所以这里应该是year(i).year(s)是每次都按照2012这个闰年加的,所以加了2012次366天。
num+=366;
else
num+=365;
}
return num;
}//year'day;