c++的一道题...已知1900年1月1日是星期一, 输入n, 编程求自该日期开始的第n天的年月日及星期

#include <iostream>
using namespace std;
int f(int year){
if(year%4==0&&year%100!=0 || year%400==0)
return 1;
else
return 0;
}
int main(){
int everyear,year,evermonth,month,day,week,n;
cout<<"请输入n:";
cin>>n;
week=n%7+1;
do{
int i=1900;
everyear=365+f(i);
i++;
n=n-everyear;
year=i+1;
} while(n>0);
do{
int i=1;
if(i==1||i==3||i==5||i==7||i==8||i==10||i==12)
evermonth=31;
if(i==4||i==6||i==9||i==11)
evermonth=30;
if(i==2){
if((year%4==0&&year%100!=0)||(year%400==0))
evermonth=28;
else
evermonth=29;
}
i++;
n=n-evermonth;
month=i+1;
} while(n>0);
day=n;
cout<<year<<"年"<<month<<"月"<<day<<"日"<<" 星期"<<week;
return 0;
}

编译正确 运行是错的 知道有问题 但是不会改 QAQ 求大神指教

第一个do~while和第二个do~while循环的逻辑就有错误。以n==1为例说明:进入第一个do后,由于1900不是闰年,所以everyear==365,n=n-everyear;使n==-364,因n<0而结束循环;进入第二个do后n=n-evermonth;使n==-364-31(或30或29或28)结果是个负数,因而第二个do~while循环也退出。这时day=n;使day获得了一个近400的负数,后面输出自然不可能正确……第一个循环里的year的计算也是错的,已经i++了,还来个year=i+1;,这一次就增加了两年……
温馨提示:答案为网友推荐,仅供参考
第1个回答  2016-10-29
计算到1900-01-01之间的天数,再和7取余

~追问

这样是求星期吗?可是星期是对的,年月日错了QAQ

相似回答