今天就偶然想到一个特别妙的算法
用switch-case但不使用break跳出循环也就意味着找到当前条件后仍然执行下面的条件的代码
比如说现在我的month是3
首先进入了case3的情况待此条件内的代码执行完毕后并未退出而是继续执行case2与case1
#include <stdio.h>
//输出年月日判断这一天是该年中的第几天
int main()
{
int year = 0, month = 0, day = 0; //年月日
printf("请输入年月日\n");
int flag = 0, ans = 0; //用于标志是否为闰年
scanf("%d %d %d", &year, &month, &day);
if ((year % 400 == 0) || (year % 4 == 0 && year % 100 != 0))
{
flag = 1; //是闰年
}
ans += day;
switch (month)
{
case 12:
ans += 30;
case 11:
ans += 31;
case 10:
ans += 30;
case 9:
ans += 31;
case 8:
ans += 31;
case 7:
ans += 30;
case 6:
ans += 31;
case 5:
ans += 30;
case 4:
ans += 31;
case 3:
if (flag == 1)
{
ans += 29; //闰年二月29天
}
else
{
ans += 28;
}
case 2:
ans += 31;
case 1:
ans += 0;
}
printf("%d月%d日是%d年的第%d天", month, day, year, ans);
return 0;
}