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

#include<iostream>usingnamespacestd;intf(intyear){if(year%4==0&&year%100!=0||year%400... #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 求大神指教
展开
 我来答
White_MouseYBZ
2016-10-30 · TA获得超过4万个赞
知道大有可为答主
回答量:2.1万
采纳率:82%
帮助的人:6675万
展开全部
第一个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;,这一次就增加了两年……
匿名用户
2016-10-29
展开全部
计算到1900-01-01之间的天数,再和7取余

~
追问
这样是求星期吗?可是星期是对的,年月日错了QAQ
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式