例2.6(闰年问题)
题目链接:链接
//四年一闰,百年不闰,四百年再闰
#include <bits/stdc++.h>
using namespace std;
bool is_leapyear(int n){
if((n%4==0&&n%100!=0)||(n%400 == 0)){
return true;
}
return false;
}
int main(){
int year,month,day;
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}
};
while(cin>>year>>month>>day){
int day_num=0;
if(is_leapyear(year)){
for(int i=0;i<month-1;i++){
day_num += daytab[1][i];
}
day_num += day;
}
else{
for(int i=0;i<month-1;i++){
day_num += daytab[0][i];
}
day_num += day;
}
cout<<day_num<<endl;
}
return 0;
}
例题2.7打印日期
print还是香,第一次提交没通过就是因为没考虑到年份是三位数的情况。
//四年一闰,百年不闰,四百年再闰
#include <bits/stdc++.h>
using namespace std;
bool is_leapyear(int n){
if((n%4==0&&n%100!=0)||(n%400 == 0)){
return true;
}
return false;
}
int main(){
int year,day_num,day_date;
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}
};
freopen("t.txt","r",stdin);
while(cin>>year>>day_num){
int month=0,sum=0,j=0;
if(is_leapyear(year)){
for(int i=0;sum<day_num;i++){
sum += daytab[1][i];
++month;
j=i;
}
sum -= daytab[1][j];
day_date = day_num - sum;
}
else{
for(int i=0;sum<day_num;i++){
sum += daytab[0][i];
++month;
j=i;
}
sum -= daytab[0][j];
day_date = day_num - sum;
}
printf("%04d-%02d-%02d\n",year,month,day_date);
}
return 0;
}
例题2.8