如题,面试题中的一道编程题,随便给定两个日期,不适用日期库函数计算两个日期之间相差的天数。
思路:分别计算两个日期到当前年初第一天的天数days1,days2,然后计算两个日期相差年数(左闭右开 [) )的天数days.
那么两个日期相差的天数即为days+days2-days1.
代码如下:
/************************************************************************* > Created Time: 2014年06月17日 星期二 23时22分34秒 ************************************************************************/ #include<stdio.h> #include<stdlib.h> //日期的天数 int month[13]={0,31,28,31,30,31,30,31,31,30,31,30,31}; //判断闰年 bool check_leap_year(int year) { if((year%100!=0 && year%4==0)||year%400==0)return true; else return false; } //获取年月日 void getDate(int date,int &year,int &month,int &day) { day = date%100; date /=100; month = date%100; year = date/100; } //获取到年初的天数 int getdaysfrom(int year,int month1,int day) { if(check_leap_year(year))month[2]=29; else month[2]=28; int total=0; for(int i = 1; i < month1; i++) total += month[i]; total += day; return total; } //日期格式为 yyyymmdd //思路,求出日期到当前年初的天数a1,a2,然后求出两个日期相差的年的天数n //n+a2-a1 int intdiffDays(int date1,int date2) { if(date1<=0||date1<=0||date2>99999999||date2>99999999)return 0; if(date1 > date2) { date1 = date1+date2; date2 = date1-date2; date1 = date1-date2; } int year1,year2,month1,month2,day1,day2; getDate(date1,year1,month1,day1); getDate(date2,year2,month2,day2); int days=0; for(int i=year1; i<year2; i++ ) { if(check_leap_year(i)) days += 366; else days += 365; } int n1 = getdaysfrom(year2,month2,day2); int n2 = getdaysfrom(year1,month1,day1); return (days + n1 - n2); } int main() { printf("请输入两个日期,格式为YYYMMDD:\n"); int date1,date2; scanf("%d%d",&date1,&date2); printf("两个日期之间相差天数为:%d\n",intdiffDays(date1,date2)); return 0; }
本文转自NewPanderKing51CTO博客,原文链接: http://www.cnblogs.com/newpanderking/p/3876587.html,如需转载请自行联系原作者