题目
输入一个包含年月日的字符串,判断这个日期在当年的第几天。(限定用switch)
题解
switch里面,如果你不主动break的话,它会一直执行下面的语句。
case x只是作为第一次进入switch循环的降落点,
后续遇到case x将不再进行判断。
代码
我不造对不对,没有样例。
#include<bits/stdc++.h>
using namespace std;
int main(){
char s[10];
scanf("%s", s);
int y = 0, m = 0, d = 0;
for(int i = 0; i <= 3; i ++)
y = y * 10 + s[i] - '0';
for(int i = 4; i <= 5; i ++)
m = m * 10 + s[i] - '0';
for(int i = 6; i <= 7; i ++)
d = d * 10 + s[i] - '0';
//判断是不是闰年
bool r;
//特殊情况一:3200的倍数
if(!(r % 3200)) r = 0;
//特殊情况二:100的倍数但不是400的倍数
else if(!(y % 100) && y % 400) r = 0;
//普通情况下的闰年 :
else if(!(y % 4)) r = 1;
//平年
else r = 0;
//这一年的第几天
int dat = d;
//把前面几个月的天数加上
switch(m) {
case 12:
dat += 30;
case 11:
dat += 31;
case 10:
dat += 30;
case 9:
dat += 31;
case 8:
dat += 31;
case 7:
dat += 30;
case 6:
dat += 31;
case 5:
dat += 30;
case 4:
dat += 31;
case 3:
//闰年
if(r)
dat += 29;
//不是闰年
else
dat += 28;
case 2:
dat += 31;
case 1:
dat += 0;
}
printf("%d", dat);
// printf("%d %d %d ", y, m, d);
return 0;
}