北理08计算机复试上机——处理日期(两日期间隔、日期相加)

#include <iostream>
#include <cstdio>
using namespace std; 

int daytab[2][12] = {
    
    
		{
    
    31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31},//平年 
		{
    
    31, 29, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31}//闰年 
	};
bool isrun(int year){
    
    //判断是否为闰年 
	return ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0);
}
int count(int year, int month, int day){
    
    //计算当前日期是今年第几天 
	int ans = 0, i;
	if(isrun(year)){
    
    //闰年 
		for(i = 0; i < month - 1; ++i){
    
    
			ans += daytab[1][i];
		}
		ans += day;
	}else{
    
    
		for(i = 0; i < month - 1; ++i){
    
    
			ans += daytab[0][i];
		}
		ans += day;
	}
	return ans;
}	

void cal(int year, int month, int day, int len){
    
    
	int total, i;
	total = count(year, month, day);
	total += len;
	while(1){
    
    //处理年份 
		if(isrun(year) && total > 366){
    
    
			++year;
			total -= 366;
		}else if(!isrun(year) && total > 365){
    
    
			++year;
			total -= 365;
		}else{
    
    
			break;
		}
	}
	month = 1;
	if(isrun(year)){
    
    
		for(i = 0; i < 12; ++i){
    
    //处理月份 
			if(total > daytab[1][i]){
    
    
				total -= daytab[1][i];
				++month;
			}else{
    
    
				break;
			}
		}
	}else{
    
    
		for(i = 0; i < 12; ++i){
    
    //处理月份 
			if(total > daytab[0][i]){
    
    
				total -= daytab[0][i];
				++month;
			}else{
    
    
				break;
			}
		}
	}
	day = total;//处理日期
	cout<<"处理后日期为:"<<year<<"-"<<month<<"-"<<day<<endl; 
}
	
int main(int argc, char *argv[]) {
    
    
	int func;
	cout<<"命令1后输入两行,表示两个日期(yyyy-mm-dd),计算两个日期间隔"<<endl;
	cout<<"命令2后输入两行,第一行为日期,第二行为间隔天数"<<endl;
	cin>>func;
	int year1, month1, day1, year2, month2, day2, len;
	if(func == 1){
    
    
		scanf("%d-%d-%d", &year1, &month1, &day1);
		scanf("%d-%d-%d", &year2, &month2, &day2);
		printf("两日期相隔%d天\n", count(year2, month2, day2) - count(year1, month1, day1));
	}else if(func == 2){
    
    
		scanf("%d-%d-%d", &year1, &month1, &day1);
		scanf("%d", &len);
		cal(year1, month1, day1, len);
	}
	return 0;
}

猜你喜欢

转载自blog.csdn.net/baidu_36004106/article/details/104955995