一道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; }
本回答被题主选为最佳回答 , 对您是否有帮助呢?解决 无用评论 打赏 举报 编辑记录
悬赏问题
- ¥15 uniapp uview http 如何实现统一的请求异常信息提示?
- ¥15 有了解d3和topogram.js库的吗?有偿请教
- ¥100 任意维数的K均值聚类
- ¥15 stamps做sbas-insar,时序沉降图怎么画
- ¥15 买了个传感器,根据商家发的代码和步骤使用但是代码报错了不会改,有没有人可以看看
- ¥15 关于#Java#的问题,如何解决?
- ¥15 加热介质是液体,换热器壳侧导热系数和总的导热系数怎么算
- ¥100 嵌入式系统基于PIC16F882和热敏电阻的数字温度计
- ¥20 BAPI_PR_CHANGE how to add account assignment information for service line
- ¥500 火焰左右视图、视差(基于双目相机)