PTA刷題——計算天數
阿新 • • 發佈:2018-12-03
7-3 計算天數 (15 分)
本題要求編寫程式計算某年某月某日是該年中的第幾天。
輸入格式:
輸入在一行中按照格式“yyyy/mm/dd”(即“年/月/日”)給出日期。
注意:閏年的判別條件是該年年份能被4整除但不能被100整除、或者能被400整除。閏年的2月有29天。
輸出格式:
在一行輸出日期是該年中的第幾天。
輸入樣例1:
2009/03/02
輸出樣例1:
61
輸入樣例2:
2000/03/02
輸出樣例2:
62
題目分析
注意閏年和平年,有好幾種寫法,給出個人的兩種寫法
第一種
#include<stdio.h> int main() { int y,m,d,time; scanf("%d/%d/%d",&y,&m,&d); if((y%4==0&&y%100!=0)||(y%400==0)){ if(m<2){ time=d; }else if(m>=2&&m<3){ time=31+d; }else if(m>=3&&m<4){ time=31+29+d; }else if(m>=4&&m<5){ time=31+29+31+d; }else if(m>=5&&m<6){ time=31+29+31+30+d; }else if(m>=6&&m<7){ time=31+29+31+30+31+d; }else if(m>=7&&m<8){ time=31+29+31+30+31+30+d; }else if(m>=8&&m<9){ time=31+29+31+30+31+30+31+d; }else if(m>=9&&m<10){ time=31+29+31+30+31+30+31+31+d; }else if(m>=10&&m<11){ time=31+29+31+30+31+30+31+31+30+d; }else if(m>=11&&m<12){ time=31+29+31+30+31+30+31+31+30+31+d; }else{ time=31+29+31+30+31+30+31+31+30+31+30+d; } }else{ if(m<2){ time=d; }else if(m>=2&&m<3){ time=31+d; }else if(m>=3&&m<4){ time=31+28+d; }else if(m>=4&&m<5){ time=31+28+31+d; }else if(m>=5&&m<6){ time=31+28+31+30+d; }else if(m>=6&&m<7){ time=31+28+31+30+31+d; }else if(m>=7&&m<8){ time=31+28+31+30+31+30+d; }else if(m>=8&&m<9){ time=31+28+31+30+31+30+31+d; }else if(m>=9&&m<10){ time=31+28+31+30+31+30+31+31+d; }else if(m>=10&&m<11){ time=31+28+31+30+31+30+31+31+30+d; }else if(m>=11&&m<12){ time=31+28+31+30+31+30+31+31+30+31+d; }else{ time=31+28+31+30+31+30+31+31+30+31+30+d; }} printf("%d",time); return 0; }
第二種
第一種程式碼冗長,但是也是正確的
#include<bits/stdc++.h> using namespace std; int fun(int n) { if(n%4==0&&n%100!=0||n%400==0) return 1; else return 0; } int main() { int year,month,day; int sum=0; int a[12]= {31,28,31,30,31,30,31,31,30,31,30,31}; scanf("%d/%d/%d",&year,&month,&day); if(fun(year)) a[1]=29; for(int i=0; i<month-1; i++) sum+=a[i]; sum+=day; cout<<sum<<endl; }