PTA——计算天数

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版权协议,转载请附上原文出处链接和本声明。