一道c++面向对象程序与设计的习题
我们已经知道,公元 1年1月1日是星期四,知道了这个事实,我们就可以编程计算任意一个日期是星期几,但需要注意的是,罗马教皇格里戈八世在1582年2月24日颁布法令,永远抹去了1582年10月5日到1582年10月14日。历史上从来不曾有过这10天。也就是说,1582年10月4日是星期四,它的第二天是1582年10月15日星期五。
PTA c++你的生日是星期几?
- 写回答
- 好问题 0 提建议
- 追加酬金
- 关注问题
- 邀请回答
-
2条回答 默认 最新
- 技术专家团-小桥流水 2022-03-15 00:17关注
运行结果如下:
代码:
#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 int fromInitDays() { int i; int sum = 0; int a[] = { 0,31,28,31,30,31,30,31,31,30,31,30,31 }; for (i = 1; i < year; i++) { if (i % 4 == 0 && i % 100 != 0 || i % 400 == 0) sum += 366; else sum += 365; } // if (year % 4 == 0 && year % 100 != 0 || year % 400 == 0) a[2] = 29; for (i = 1; i < month; i++) sum += a[i]; // sum += day; //判断是否包含1582年10月15 if (year > 1582) sum -= 10; else if (year == 1582) { if (month > 10) sum -= 10; else if (month == 10 && day >= 15) sum -= 10; } sum -= 1; //减去第1天 //计算星期 weekday = (sum % 7 + 4) % 7; return sum; } void setValue(int y, int m, int d) { if (y < 1) year = 1; else year = y; if (m < 1) month = 1; else if (m > 12) month = 12; else month = m; if (d < 1) day = 1; else if (d > 31) day = 31; else day = d; } void show() { cout << year << "年" << month << "月" << day << "日:" << week[weekday] << endl; } }; int main() { struct Calendar ca; int y, m, d; cin >> y >> m >> d; ca.setValue(y, m, d); cout << ca.fromInitDays() << endl; ca.show(); return 0; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥20 机器学习能否像多层线性模型一样处理嵌套数据
- ¥20 西门子S7-Graph,S7-300,梯形图
- ¥50 用易语言http 访问不了网页
- ¥50 safari浏览器fetch提交数据后数据丢失问题
- ¥15 matlab不知道怎么改,求解答!!
- ¥15 永磁直线电机的电流环pi调不出来
- ¥15 用stata实现聚类的代码
- ¥15 请问paddlehub能支持移动端开发吗?在Android studio上该如何部署?
- ¥20 docker里部署springboot项目,访问不到扬声器
- ¥15 netty整合springboot之后自动重连失效