描述:在咱們如今使用的日曆中, 閏年被定義爲能被4整除的年份,可是能被100整除而不能被400整除的年是例外,它們不是閏年。例如:1700, 1800, 1900 和 2100 不是閏年,而 1600, 2000 和 2400是閏年。 給定從公元2000年1月1日開始逝去的天數,你的任務是給出這一天是哪年哪月哪日星期幾。ios
輸入:輸入包含若干行,每行包含一個正整數,表示從2000年1月1日開始逝去的天數。輸入最後一行是−1, 沒必要處理。能夠假設結果的年份不會超過9999。測試
輸出:對每一個測試樣例,輸出一行,該行包含對應的日期和星期幾。格式爲「YYYY-MM-DD DayOfWeek」, 其中 「DayOfWeek」 必須是下面中的一個: "Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday" and "Saturday「。spa
input:code
1730
1740
1750
1751
-1
output:
2004-09-26 Sunday 2004-10-06 Wednesday 2004-10-16 Saturday 2004-10-17 Sunday
分析:難點是年月日的判斷,咱們能夠用這樣一種方法來計算,首先計算年份,最開始爲2001,剩餘天數爲n,若是n大於該年的天數,年數加一,同時剩餘天數減去該年天數,知道剩餘天數小於該年天數,便可肯定年份。一樣的方法肯定月份。最後剩餘天數加1就是日期。星期的判斷在2000年1月1日的星期基礎上加n%7。 1 #include<iostream> 2 #include<iomanip> 3 #include<iostream>
#include<iostream>
#include<iomanip>
using namespace std; 4 5 int yearDays(int year) //返回該年的天數 6 { 7 if ((year % 4 == 0 && year % 100 != 0) || year % 400 == 0) 8 return 366; 9 else 10 return 365; 11 } 12 13 int monthDays(int year, int month) //返回對應月份天數 14 { 15 int a[13];
for(int i=1;i<13;i++)
if(i==4||i==6||i==9||i==11)
a[i]=30;
else
a[i]=31;
if(yearDays(year)==366)
a[2]=29;
else
a[2]=28;
return a[month];
34 } 35 void cal(int n, int &year, int &month, int &day) //計算年月日 36 { 37 year = 2000; 38 while (n >= yearDays(year)) 39 { 40 n -= yearDays(year); 41 year++; 42 } 43 month = 1; 44 while (n >= monthDays(year,month)) 45 { 46 n -= monthDays(year, month); 47 month++; 48 } 49 day = n+1; 50 } 51 void week(int n) //計算星期幾 52 { 53 int week = n % 7; 54 switch (week) 55 { 56 case 0:cout << "Saturday"; break; 57 case 1:cout << "Sunday"; break; 58 case 2:cout << "Monday"; break; 59 case 3:cout << "Tuesday"; break; 60 case 4:cout << "Wednesday"; break; 61 case 5:cout << "Thursday"; break; 62 case 6:cout << "Friday"; 63 } 64 } 65 66 int main() 67 { 68 int n,year,month,day; 69 70 while ((cin >> n) && (n != EOF)) 71 { 72 n; 73 cal(n, year, month, day); 74 cout << year << "-" <<setw(2)<<setfill('0')<< month << "-" <<setw(2)<<setfill('0')<< day << " "; 75 week(n); 76 cout << endl; 77 } 78 system("pause"); 79 return 0; 80 }