很抱歉我第一次写出来用了这么长的代码,并且还费人
#include <stdio.h>
int main()
{
int YY,MM,DD;
int ans;
int day;
int res;
while(scanf("%d/%d/%d",&YY,&MM,&DD))
{
if((YY %4 == 0 && YY % 100 != 0) || YY %400 ==0)
{
ans = 1;
}else{
ans = 0;
}
if(ans == 0)
{
switch (MM)
{
case 1:day = 0;break;
case 2:day = 31;break;
case 3:day = 59;break;
case 4:day = 90;break;
case 5:day = 120;break;
case 6:day = 151;break;
case 7:day = 181;break;
case 8:day = 212;break;
case 9:day = 243;break;
case 10:day = 273;break;
case 11:day = 304;break;
case 12:day = 334;break;
}
}else{
switch (MM)
{
case 1:day = 0;break;
case 2:day = 31;break;
case 3:day = 60;break;
case 4:day = 91;break;
case 5:day = 121;break;
case 6:day = 152;break;
case 7:day = 182;break;
case 8:day = 213;break;
case 9:day = 244;break;
case 10:day = 274;break;
case 11:day = 305;break;
case 12:day = 335;break;
}
}
res = day + DD;
printf("%d\n",res);
}
return 0;
}
看了其他大佬的代码发现只用if语句会很简洁
#include <stdio.h>
int main()
{
int YY,MM,DD;
int run;
int ans;
while(scanf("%d/%d/%d",&YY,&MM,&DD))
{
if((YY %4 == 0 && YY % 100 != 0) || YY %400 ==0)
{
run = 1;
}else{
run = 0;
}
ans = DD;
if(MM>1) ans += 31;
if(MM>2){
if(run == 1){
ans ++;
}
ans += 28;
}
if(MM>3) ans += 31;
if(MM>4) ans += 30;
if(MM>5) ans += 31;
if(MM>6) ans += 30;
if(MM>7) ans += 31;
if(MM>8) ans += 31;
if(MM>9) ans += 30;
if(MM>10) ans += 31;
if(MM>11) ans += 30;
printf("%d\n",ans);
}
return 0;
}
学习一下大佬的手法:
#include <stdio.h>
int run(int x);
int main()
{
int YY,MM,DD;
int ans;
while(scanf("%d/%d/%d",&YY,&MM,&DD))
{
ans = DD;
if(YY>1) ans += 31;
if(YY>2)
{
if(run(YY)){ //巧妙地利用run函数的返回结果
ans++;
} ans += 28;
}
if(MM>3) ans += 31;
if(MM>4) ans += 30;
if(MM>5) ans += 31;
if(MM>6) ans += 30;
if(MM>7) ans += 31;
if(MM>8) ans += 31;
if(MM>9) ans += 30;
if(MM>10) ans += 31;
if(MM>11) ans += 30;
printf("%d\n",ans);
}
return 0;
}
int run(int x)
{
if((x%4 == 0 && x%100 != 0)||x%400 == 0)
{
return 1;
}else return 0;
}