- 论坛徽章:
- 0
|
要求输入两个日期,比如2005 2 15,2006 2 15.然后计算出两个日期中间有多少天。写完了,但是结果这个汗啊。好像算法有点问题,后面的循环我输入0想退出,却总是不行。还有反复几次输入之后,无论输入什么日期,总是出错。请高手帮忙指正。
#include <iostream.h>
int year1,year2,month1,month2,day1,day2;
const int Month[12]={31,28,31,30,31,30,31,31,30,31,30,31};
void swap(){
int yeartmp,monthtmp,daytmp;
yeartmp=year1;
monthtmp=month1;
daytmp=day1;
year1=year2;
month1=month2;
day1=day2;
year2=yeartmp;
month2=monthtmp;
day2=daytmp;
}
int checkLeap(int year)
{
int remain=year%4;
if(remain!=0)
return 0;
else if(year%100==0&&year%400!=0)
return 0;
else
return 1;
}
int checkDate(int year,int month,int day){
if(year<1000||year>3000||month<1||month>12||day<1) return 0;
if(month!=2){
if (day>Month[month-1]) return 0;
else return 1;}
else {
if (checkLeap(year)==1) {
if (day>Month[1]+1) return 0;
else return 1;}
else {
if (day>Month[1]) return 0;
else return 1;}
}
}
void input(){
cout<<"Please enter your first date(yyyy mm dd):";
cin>>year1>>month1>>day1;
if(checkDate(year1,month1,day1)==0) {
cout<<"Your input is wrong.Please input again."<<endl;
input();}
cout<<"Please enter your second date(yyyy mm dd):";
cin>>year2>>month2>>day2;
if(checkDate(year2,month2,day2)==0) {
cout<<"Your input is wrong.Please input again."<<endl;
input();}
}
int calc(int year,int month,int day){
int num=day;
for(int i=1;i<month;i++) num=num+Month[i-1];
if (month>2&&checkLeap(year)==1) num++;
return num;
}
int main(){
int sel;
do{
cout<<"To calculate how many days are there between two dates."<<endl;
input();
if(year1>year2) swap();
else {if (month1>month2) swap();
else {if (day1>day2) swap();
}
}
int tmp,tmp1,result;
if (checkLeap(year1)==1) tmp=366-calc(year1,month1,day1);
else tmp=365-calc(year1,month1,day1);
tmp1=calc(year2,month2,day2);
int leapnum;
leapnum=(year2-year1)/4;
result=tmp+tmp1+365*(year2-year1-1)+leapnum;
cout<<"There are "<<result<<" days between the two dates."<<endl;
cout<<"To go on, press 1"<<endl<<"To quit, press 0"<<endl<<"Please enter your choice:";
cin>>sel;
} while (sel=1);
} |
|