算法描述:

输入某年某月某日,判断这一天是这一年的第几天?

输入格式:

输入三个整数,分别代表:年 月 日。

输出格式:

一个整数,代表这一天是这一年的第几天。

样例数据输入:

2018 3 5

样例数据输出:

65

思路:本题要做到容错的话,需要对输入的年月日进行判断,看其值是否符合,例如:0  2 3;2018 2 29;2020 3 32;等都是错误的输入格式。之后判断闰年,闰年2月多一天

程序代码:

#include<iostream>
using namespace std;
int main(){
int year,month,day,count=0,leap=0;
scanf("%d%d%d",&year,&month,&day);
if(year<=0){
printf("error\n");
return 0;
}
if(year%400==0||(year%4==0&&year%100!=0)){
leap=1;
}
switch(month){
case 1:count=0;
break;
case 2:count=31;
break;
case 3:count=59;
break;
case 4:count=90;
break;
case 5:count=120;
break;
case 6:count=151;
break;
case 7:count=181;
break;
case 8:count=212;
break;
case 9:count=243;
break;
case 10:count=273;
break;
case 11:count=304;
break;
case 12:count=334;
break;
default:
printf("error\n");
break;
}
count+=day;
if(month==1||month==3||month==5||month==7||month==8||month==10||month==12){
if(day>31){
printf("error\n");
return 0;
}
}else if(month==4||month==6||month==9||month==11){
if(day>30){
printf("error\n");
return 0;
}
}else{
if(leap==1&&day>29){
printf("error\n");
return 0;
}else if(leap==0&&day>28){
printf("error\n");
return 0;
}
}
if(leap==1&&month>2){
count++;
}
printf("%d\n",count);
return 0;

}

优化:

#include<cstdio>
int main(){
int y,m,d,sum,k;
int a[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
while(scanf("%d%d%d",&y,&m,&d)){
sum=0;
if(((y%4==0)&&(y%100!=0))||(y%400==0)){
a[2]=29;
}
for(k=0;k<m;k++){
sum+=a[k];
}
sum+=d;
printf("%d\n",sum);
}
return 0;
}

 

运行结果:

根据年月日判断这一年第几天_#include