//在这里给出函数被调用进行测试的例子:
#include <iostream>
#include <string>
using namespace std;
string week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
struct Calendar{
int year;
int month;
int day;
int weekday;//注:星期天为0,星期一为1,...,星期六为6;01-1-1为星期四
int fromInitDays();
void setValue(int y,int m,int d);
void show();
};
int main()
{
Calendar birthday;
int y,m,d;
cin>>y>>m>>d;
birthday.setValue(y,m,d);
cout<<birthday.fromInitDays()<<endl;
birthday.show();
return 0;
}
int Calendar::fromInitDays()
{
int sum=0,i,j;
for(i=1;i<year;i++){
if((i%4==0&&i%100!=0)||(i%400==0))
sum+=366;
else sum+=365;
}
for(j=1;j<month;j++){
if(j==2){
if((year%4==0&&year%100!=0)||(year%400==0))
sum+=29;
else sum+=28;
}
else if(j==1||j==3||j==5||j==8||j==10||j==12||i==7)
{
sum+=31;
}
else {
sum+=30;
}
}
sum+=day-1;
if(sum>577724){
sum=sum-10;
}
weekday=(sum+4)%7;
return sum;
}
void Calendar::setValue(int xx,int yy,int zz)
{
//cout<<this->fromInitDays() <<endl;
if(xx<1) year=1;
else year=xx;
if(yy<1) month=1;
else if(yy>12) month=12;
else month=yy;
if(zz<1) day=1;
else if(zz>31) day=31;
else day=zz;
//cout<<year<<month<<day<<endl;
}
void Calendar::show()
{
cout<<year<<"-"<<month<<"-"<<day<<":"<<week[weekday]<<endl;
}
请问这个哪错了啊?输入1582 10 4,1582 10 15,2000 15 50的总天数答案少了一天。
把sum+=day-1;
改为sum+=day;
//在这里给出函数被调用进行测试的例子:
#include <iostream>
#include <string>
using namespace std;
string week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
struct Calendar{
int year;
int month;
int day;
int weekday;//注:星期天为0,星期一为1,...,星期六为6;01-1-1为星期四
int fromInitDays();
void setValue(int y,int m,int d);
void show();
};
int main()
{
Calendar birthday;
int y,m,d;
cin>>y>>m>>d;
birthday.setValue(y,m,d);
cout<<birthday.fromInitDays()<<endl;
birthday.show();
return 0;
}
int Calendar::fromInitDays()
{
int sum=0,i,j;
for(i=1;i<this->year;i++){
if((i%4==0&&i%100!=0)||(i%400==0))
sum+=366;
else sum+=365;
}
for(j=1;j<this->month;j++){
if(j==2){
if((this->year%4==0&&this->year%100!=0)||(this->year%400==0))
sum+=29;
else sum+=28;
}
else if(j==1||j==3||j==5||j==7||j==8||j==10||j==12)
{
sum+=31;
}
else {
sum+=30;
}
}
sum+=this->day-1;
if (this->year > 1582 || this->year == 1582 && this->month > 10|| this->year == 1582 && this->month == 10 && this->day > 4)
sum -= 10;
weekday=(sum+4)%7;
return sum;
}
void Calendar::setValue(int xx,int yy,int zz)
{
//cout<<this->fromInitDays() <<endl;
if(xx<1) year=1;
else year=xx;
if(yy<1) month=1;
else if(yy>12) month=12;
else month=yy;
if(zz<1) day=1;
else if(zz>31) day=31;
else day=zz;
//cout<<year<<month<<day<<endl;
}
void Calendar::show()
{
cout<<year<<"-"<<month<<"-"<<day<<":"<<week[weekday]<<endl;
}
发现了错误在将i==7放在了i==12后面,或运算有误
ps:以下为其他正确答案,它的答案更加简介,但会多判断一下今年是否为闰年,我的则不会,但我的看起来不简洁
#include <iostream>
#include <string>
using namespace std;
string week[] = {"Sunday","Monday","Tuesday","Wednesday","Thursday","Friday","Saturday"};
struct Calendar{
int year;
int month;
int day;
int weekday;//注:星期天为0,星期一为1,...,星期六为6;01-1-1为星期四
int fromInitDays();
void setValue(int y,int m,int d);
void show();
};
int main()
{
Calendar birthday;
int y,m,d;
cin>>y>>m>>d;
birthday.setValue(y,m,d);
cout<<birthday.fromInitDays()<<endl;
birthday.show();
return 0;
}
int days[] = {0, 31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31};
bool leap(int x)
{
if ((x % 4 == 0 && x % 100 != 0) || x % 400 == 0) return 1;
return 0;
}
int Calendar::fromInitDays() //计算天数, 初始化星期几
{
int sum = 0;
//年份
for (int i = 1; i < this->year; i ++ )
if (leap(i)) sum += 366;
else sum += 365;
//月份
for (int i = 1; i < this->month; i ++ )
sum += days[i];
//天数
sum += this->day - 1;
//当年为润年 sum+1;
if (leap(this->year) && this->month > 2) sum ++ ;
//判断是否在1582.10.4之后, 如果是, 则减10天;
if (this->year > 1582 || this->year == 1582 && this->month > 10|| this->year == 1582 && this->month == 10 && this->day > 4)
sum -= 10;
//计算星期几
this->weekday = (4 + sum) % 7;
//返回结果
return sum ;
}
void Calendar::setValue(int y, int m, int d)
{
if (y < 1) y = 1;
this->year = y;
if (m < 1) m = 1;
if (m > 12) m = 12;
this->month = m;
if (d < 1) d = 1;
if (d > 31) d = 31;
this->day = d;
}
void Calendar::show()
{
printf("%d-%d-%d:%s", this->year, this->month, this->day, week[this->weekday].c_str());
}