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;
}