PTA——计算天数
题目:
本题要求编写程序计算某年某月某日是该年中的第几天。
输入格式:
输入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)给出日期。注意:闰年的判别条件是该年年份能被4整除但不能被100整除、或者能被400整除。闰年的2月有29天。
输出格式:
在一行输出日期是该年中的第几天。
输入样例1:
2009/03/02输出样例1:
61输入样例2:
2000/03/02输出样例2:
62整体思路如下:
函数版思路我就不讲了,以后读者会学到。非函数版,先用switch函数直接算出闰年的天数,之后再进行闰年和非闰年的判断,其中a是用来存储总天数,各位应该能看懂吧,看不懂的评论哪一块看不懂,我再细改。
整体代码如下:
非函数版
#include<stdio.h>
int main()
{
int y,m,d,a;
scanf("%d/%d/%d",&y,&m,&d);
switch(m)
{
case(1):a=d;break;
case(2):a=31*1+d;break;
case(3):a=31*1+29*1+d;break;
case(4):a=31*2+29*1+d;break;
case(5):a=31*2+30*1+29*1+d;break;
case(6):a=31*3+30*1+29*1+d;break;
case(7):a=31*3+30*2+29*1+d;break;
case(8):a=31*4+30*2+29*1+d;break;
case(9):a=31*5+30*2+29*1+d;break;
case(10):a=31*5+30*3+29*1+d;break;
case(11):a=31*6+30*3+29*1+d;break;
case(12):a=31*6+30*4+29*1+d;break;
}
if(y%400==0||(y%4==0&&y%100!=0))
{
printf("%d",a);
}
else
{
if(m<=2) printf("%d",a);
else printf("%d",a-1);
}
return 0;
}函数版
#include<stdio.h>
int normal(int m, int d);
int main()
{
int y,m,d;
scanf("%d/%d/%d",&y,&m,&d);
if(y%400==0||(y%4==0&&y%100!=0))
{
printf("%d",normal(m,d));
}
else
{
if(m<=2) printf("%d",normal(m,d));
else printf("%d",normal(m,d)-1);
}
return 0;
}
int normal(int m,int d)
{
int a;
switch(m)
{
case(1):a=d;break;
case(2):a=31*1+d;break;
case(3):a=31*1+29*1+d;break;
case(4):a=31*2+29*1+d;break;
case(5):a=31*2+30*1+29*1+d;break;
case(6):a=31*3+30*1+29*1+d;break;
case(7):a=31*3+30*2+29*1+d;break;
case(8):a=31*4+30*2+29*1+d;break;
case(9):a=31*5+30*2+29*1+d;break;
case(10):a=31*5+30*3+29*1+d;break;
case(11):a=31*6+30*3+29*1+d;break;
case(12):a=31*6+30*4+29*1+d;break;
}
return a;
}版权声明:本文为Just__Joker原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接和本声明。