1. 今年的第几天(日期问题)
分析 设置二位数组存储平年和闰年12个月的不同天数,判断输入的年份是平年还是闰年,按照月份逐月累加,最后加上当月天数
#include <cstdio>
using namespace std;
int dayTable[2][13] =
{0,31,28,31,30,31,30,31,31,30,31,30,31,
0,31,29,31,30,31,30,31,31,30,31,30,31};
bool IsLeapYear(int year){
return (year % 4 ==0 && year % 100 != 0) || (year % 400 == 0);
}
int main(){
int year, month, day;
while((scanf("%d %d %d",&year, &month, &day))!= EOF){
int num = 0;
for(int i = 0; i < month; ++i)
num += dayTable[IsLeapYear(year)][i];
num += day;
printf("%d", num);
}
return 0;
}
2. 已知年份和天数求月日
分析 与上题思路类似
#include <cstdio>
using namespace std;
int dayTable[2][13] =
{0,31,28,31,30,31,30,31,31,30,31,30,31,
0,31,29,31,30,31,30,31,31,30,31,30,31};
bool IsLeapYear(int year){
return (year % 4 ==0 && year % 100 != 0) || (year % 400 == 0); //判断是否为闰年
}
int main(){
int year, month, day, num;
while((scanf("%d %d",&year, &num))!= EOF){
int row = IsLeapYear(year);
month = 0;
while(num > dayTable[row][month]){ //用num逐月减
num -= dayTable[row][month];
month++;
}
day = num;
printf("%04d-%02d-%02d",year,month, day);
}
return 0;
}