#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;
}
北理08计算机复试上机——处理日期(两日期间隔、日期相加)
猜你喜欢
转载自blog.csdn.net/baidu_36004106/article/details/104955995
今日推荐
周排行