计算前一天

是一道面试题,时间掐的比较紧就比较着急,然后弄了一堆判断,考下来后感觉自己特笨,这个当天下午想出来的……

void GetPreDat(const char *day, char *preDay)
{
	int day_in_month[] = {31,31,28,31,30,31,30,31,31,30,31,30,31};
	int month_circle[] = {12,1,2,3,4,5,6,7,8,9,10,11,12};
	
	int i_date;
	int i_year,i_month,i_day;

	i_date = atoi(day);
	
	i_year = i_date/10000;
	i_month = (i_date/100)%100;
	i_day = (i_date%100);
	
	//normal
	if(i_day == 1)
	{
		//normal year
		i_day = day_in_month[i_month - 1];
		i_month = month_circle[i_month - 1];
		
		//leap year
		if((!(i_year % 4) && (i_year % 100)) || !(i_year % 400))
		{
			if(i_month == 2)
			{
				i_day = 29;
			}
		}
		
		if(i_month == 12)
		{
			--i_year;
		}
	}
	else
	{
		--i_day;
	}
	i_date = i_year*10000 + i_month*100 + i_day;
	itoa(i_date,preDay,10);
}

posted @ 2011-01-20 18:05  CuiXS  阅读(314)  评论(3)    收藏  举报