【問題描述】
已知1980年1月1日是星期二。
任意輸入一個日期,求這一天是星期幾。
【輸入形式】
從鍵盤輸入一行字串“Y-M-D”,是一個有效的公歷日期。其中Y為年(1980≤Y≤3000),M為月,D為天,都不帶有前綴0。
【輸出形式】
在螢屏輸出結果。
輸出只有一行,是代表該日星期的字串。對于星期一至星期日,分別輸出Monday、Tuesday、Wednesday、Thursday、Friday、Saturday、Sunday。在行末要輸出一個回車符。判斷閏年的演算法是:
年份能被4整除并且不能被100整除,或者能被四百整除。
【輸入樣例】
2004-1-6
【輸出樣例】
Tuesday
我的代碼:
#include<iostream>
#include<math.h>
using namespace std;
int main(){
int y,m,d,i=0;
long long e,f,g,h;
char a;
cin>>y>>a>>m>>a>>d;
e=abs(y-1980);
if(y%4==0&&y%100||y%400==0)
{f=e/4;
if(m==2)g=f*(365+365+365+366)+31+d;
else if(m==1)g=f*(365+365+365+366)+d;
else if(m%2&&m<8)g=f*(365+365+365+366)+d+m/2*31+m/2*30-1;
else if(m%2==0&&m<=8)g=f*(365+365+365+366)+d+m/2*31+(m-2)/2*30-1;
else if(m%2&&m>8)g=f*(365+365+365+366)+d+5*31+3*30-1+(m-8)/2*61;
else if(m%2==0&&m>8)g=f*(365+365+365+366)+d+5*31+3*30-1+(m-10)/2*31+(m-8)/2*30;}
else
{f=e/4;h=e%4;
if(y==2200)i=1;
if(y==2300)i=2;
if(y==2500)i=3;
if(m==1)g=f*(365+365+365+366)-i+h*365+1+d;
else if(m==2)g=f*(365+365+365+366)-i+h*365+1+31+d;
else if(m%2&&m<8)g=f*(365+365+365+366)-i+h*365+1+m/2*31+m/2*30-2+d;
else if(m%2==0&&m<=8)g=f*(365+365+365+366)-i+h*365+1+m/2*31+(m-2)/2*30-2+d;
else if(m%2&&m>8)g=f*(365+365+365+366)-i+h*365+1+5*31+3*30-2+(m-8)/2*61+d;
else if(m%2==0&&m>8)g=f*(365+365+365+366)-i+h*365+1+5*31+3*30-2+(m-10)/2*31+(m-8)/2*30+d;}
switch(g%7)
{case 1:cout<<"Tuesday";break;
case 2:cout<<"Wednesday";break;
case 3:cout<<"Thursday";break;
case 4:cout<<"Friday";break;
case 5:cout<<"Saturday";break;
case 6:cout<<"Sunday";break;
case 0:cout<<"Monday";break;
}
return 0;
}
但是測驗樣例2500-4-29結果應該是Thursday,而我的輸出是Friday,求大佬糾錯~
轉載請註明出處,本文鏈接:https://www.uj5u.com/houduan/268083.html
標籤:C++ 語言
上一篇:c++萌新求助,謝謝大佬們~
下一篇:10.42 怎么支持安卓11
