![]() |
#2
wuseRaosir2006-10-17 13:38
/* 慢慢看下,看怎么样! 可能有的地方不全,还请高手指点!!*/
#include<iostream> #include<math.h> using namespace std; int IsLeapYear(int y) { int leap=0; if(y%4==0&&y%100!=0||y%400==0) leap=1; return leap; } int DayOfYear(int y,int m,int d) { int day=0,i,n; for(i=1;i<m;i++) { switch(i) { case 1:case 3:case 5:case 7:case 8:case 10:case 12:n=31;break; case 4:case 6:case 9:case 11:n=30; break; case 2: { if(IsLeapYear(y)) n=29; else n=28; break; } default: cout<<"输入的日期错误。\n"<<endl; } day+=n; } day+=d; return day; } int InputCheckup(int year,int month,int day) { int flag=1; switch(month) { case 1:case 3:case 5:case 7:case 8:case 10:case 12: if(day>31||day<1) { flag=0; break; } case 4: case 6: case 9: case 11: if(day>30||day<1) { flag=0; break; } case 2: { flag=!((year%4==0&&year%100!=0||year%400==0)?(day>29||day<1):(day>28||day<1)); break; } default: { flag=0; break; } } return flag; } int main() { int year,year1,year2,month1,month2,day1,day2,days1=0,days2=0,days=0,count=0; loop1: cout<<"输入第一个完整的日期(年 月 日):"; cin>>year1>>month1>>day1; if(!InputCheckup(year1,month1,day1)) { cout<<"输入的日期错误,请重新输入!\n"; goto loop1; } loop2: cout<<"输入第二个完整的日期(年 月 日):"; cin>>year2>>month2>>day2; if(!InputCheckup(year2,month2,day2)) { cout<<"输入的日期错误,请重新输入!\n"; goto loop2; } year=abs(year2-year1); for(year1<year2?year1:year2;year>0;year--) { if(IsLeapYear(year1)) { days++; } days+=365; } days1=DayOfYear(year1,month1,day1); days2=DayOfYear(year2,month2,day2); if(year1<=year2) days=abs(days-days1+days2); else days=abs(days+days1-days2); cout<<year1<<"年"<<month1<<"月"<<day1<<"日"<<"是这一年的第"<<days1<<"天!"<<endl; cout<<year2<<"年"<<month2<<"月"<<day2<<"日"<<"是这一年的第"<<days2<<"天!"<<endl; cout<<"这两个日期之间的天数为:"<<days<<endl; return 0; } |
编程求任给2个日期相差的天数?(比如1998年4月9号和2080年8月5号)
我想想看看大家的思路,我自己是这样想的:先判断出起始年和结尾年的日期是当年的第几天,然后再求之间相差的天数(当然要判断闰年拉)当然就是365OR366-起始年所在的第几天+之间相差的天数+结尾年所在天数的第几天
菜鸟求助