1 題意
輸入一個日期,判斷是舊曆還是新曆,轉換成另一個曆法的日期並輸出,如果輸出舊曆,加一個*。
2分析
①特別注意!新曆和舊曆的第一天不是同一天!所以舊曆比新曆提前兩天開始。。。【這一點要具體看題目以及題目給出的測試數據是怎麼說的了。】
②變量較多,注意變量名不要用錯,特別是對變量的值進行操作,或者是輸出時。
③結束輸入的判斷。
char str[10];
錯誤: while(~scanf("%s",str)&&str!="#") 或者 if(str=="#") break; ///都不能結束輸入!
正確: if(strcmp(str,"#")==0) break;
④判斷周幾
新曆:week_name[sumday%7],week_name[0]=週日、week_name[1]=週一...
舊曆:week_name[(sumday+5)%7],week_nam[0]=週日、week_name[1]=週一...
3
#include <iostream>
#include <stdio.h>
#include <algorithm>
#include <string.h>
using namespace std;
int year_day[2]={365,366};
int month_day[2][13]={0,31,28,31,30,31,30,31,31,30,31,30,31,0,31,29,31,30,31,30,31,31,30,31,30,31};
char week_name[7][10]={"Sunday", "Monday", "Tuesday", "Wednesday", "Thursday", "Friday", "Saturday"}; ;
char month_name[13][10]={"","January", "February", "March", "April", "May", "June", "July", "August", "September", "October","November","December"};
int month,day,week,year,sumday,old;
int month_2,day_2,week_2,year_2;
int old_run(int year_temp){
return (year_temp%4==0)?1:0;
}
int new_run(int year_temp){
return ((year_temp%4==0&&year_temp%100!=0)||(year_temp%400==0))?1:0;
}
void Cal_sumday_old(){
sumday=0;
for(int i=1;i<year;i++){
sumday+=year_day[old_run(i)];
}
for(int i=1;i<month;i++){
sumday+=month_day[old_run(year)][i];
}
sumday+=day;
}
void Cal_sumday(){
sumday=0;
for(int i=1;i<year;i++){
sumday+=year_day[new_run(i)];
}
for(int i=1;i<month;i++){
sumday+=month_day[new_run(year)][i];
}
sumday+=day;
if(sumday%7==week){
old=0;
}
else{
old=1;
Cal_sumday_old();
}
}
void Change_old(){
sumday+=2;
year_2=month_2=day_2=1;
week_2=(sumday+5)%7;
for(int i=1;sumday>year_day[old_run(i)];i++){
sumday-=year_day[old_run(i)];
year_2=i+1;
}
for(int i=1;sumday>month_day[old_run(year_2)][i];i++){
sumday-=month_day[old_run(year_2)][i];
month_2=i+1;
}
day_2=sumday;
}
void Change_new(){
sumday-=2;
year_2=month_2=day_2=1;
week_2=(sumday)%7;
for(int i=1;sumday>year_day[new_run(i)];i++){
sumday-=year_day[new_run(i)];
year_2=i+1;
}
for(int i=1;sumday>month_day[new_run(year_2)][i];i++){
sumday-=month_day[new_run(year_2)][i];
month_2=i+1;
}
day_2=sumday;
}
void Print(){
printf("%s %d",week_name[week_2],day_2);
if(!old) printf("*");
printf(" %s %d\n",month_name[month_2],year_2);
}
int main()
{
//freopen("out.txt","w",stdout);
char str_week[10],str_month[10];
while(~scanf("%s",str_week)){
if(strcmp(str_week,"#")==0) break;
scanf("%d%s%d",&day,str_month,&year);
for(int i=0;i<7;i++){
if(strcmp(week_name[i],str_week)==0){
week=i;break;
}
}
for(int i=1;i<=12;i++){
if(strcmp(month_name[i],str_month)==0){
month=i;break;
}
}
old=0;
Cal_sumday();
if(old==1){//轉換爲 新曆
Change_new();
}
else if(old==0){//轉換爲 舊曆
Change_old();
}
Print();
}
return 0;
}