博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
pta习题:退休日期推算
阅读量:3960 次
发布时间:2019-05-24

本文共 4212 字,大约阅读时间需要 14 分钟。

关于日期的结构定义如下: struct DateG{ int yy,mm,dd;};

编写两个函数,一个计算自公元1年1月1日到指定的日期共经历了多少天。另一个是前一个函数的逆函数:由自公元1年1月1日历经指定的天数后的日期(返回年月日构成的日期)。

函数接口定义:

DateG days2Date(int x);int Days(DateG x);

裁判测试程序样例:

#include 
using namespace std;struct DateG{
int yy,mm,dd;};char leapYear(int year);//闰年否struct DateG _DateG(char *st);{
//"1919-9-9"-->{1919,9,9}struct DateG Add(struct DateG x,int y);//{1919,9,9}+50-->{1919,10,29}char* Date2string(struct DateG x);//{1919,9,9}-->"1919-09-09" //以上为测试程序提供的测试用函数,略去不表,//以下两函数是必须自己完成的函数 struct DateG days2Date(int x);{
//from:{1,1,1} + 100-->{1,4,11}int Days(struct DateG x);// {2,4,11} return 465 from{1,1,1} int main(){
char st[12];scanf("%s",st); struct DateG d1=_DateG(st), d2=Add(d1,60*365); printf("%s\n",Date2string(d2)); d2=Add(d2,-1000); printf("%s\n",Date2string(d2)); d2=_DateG("2020-1-23"); printf("%.2f\n",(Days(d2)-Days(d1))/365.0); return 0;}/* 请在这里填写答案 */

输入样例:

2001-1-1
输出样例:
[2060-12-17]
[2058-03-23]
19.07

帮其他专业的同学写网课作业,见到这道有点烦人的题目,一看网上没有现成的答案,那就自己写一份先码这把,没啥特别的技巧,典型的模拟,注意细节就好。

struct DateG days2Date(int x) {
struct DateG QWQ; QWQ.yy = 1; QWQ.mm = 1; QWQ.dd = 1; while (x--) {
QWQ.dd++; if ((QWQ.yy % 4 == 0 && QWQ.yy % 100 != 0) || QWQ.yy % 400 == 0) {
//是闰年 if ((QWQ.mm == 1 || QWQ.mm == 3 || QWQ.mm == 5 || QWQ.mm == 7 || QWQ.mm == 8 || QWQ.mm == 10 || QWQ.mm == 12) && QWQ.dd > 31) {
QWQ.dd = 1; QWQ.mm++; if (QWQ.mm > 12) {
QWQ.mm = 1; QWQ.yy++; } } else if (QWQ.mm == 2 && QWQ.dd > 29) {
//闰年二月单独讨论 QWQ.dd = 1; QWQ.mm++; } else if ((QWQ.mm == 4 || QWQ.mm == 6 || QWQ.mm == 9 || QWQ.mm == 11) && QWQ.dd > 30) {
QWQ.dd = 1; QWQ.mm++; } } else {
//非闰年 if ((QWQ.mm == 1 || QWQ.mm == 3 || QWQ.mm == 5 || QWQ.mm == 7 || QWQ.mm == 8 || QWQ.mm == 10 || QWQ.mm == 12) && QWQ.dd > 31) {
QWQ.dd = 1; QWQ.mm++; if (QWQ.mm > 12) {
QWQ.mm = 1; QWQ.yy++; } } else if (QWQ.mm == 2 && QWQ.dd > 28) {
//二月单独讨论 QWQ.dd = 1; QWQ.mm++; } else if ((QWQ.mm == 2 || QWQ.mm == 4 || QWQ.mm == 6 || QWQ.mm == 9 || QWQ.mm == 11) && QWQ.dd > 30) {
QWQ.dd = 1; QWQ.mm++; } } } return QWQ;} int Days(struct DateG x) {
int res = 0, flag = 1; while (flag == 1) {
res++; x.dd--; if ((x.yy % 4 == 0 && x.yy % 100 != 0) || x.yy % 400 == 0) {
//闰年 if ((x.mm == 1 || x.mm == 3 || x.mm == 5 || x.mm == 7 || x.mm == 8 || x.mm == 10 || x.mm == 12) && x.dd == 0) {
if (x.mm == 8 || x.mm == 1) x.dd = 31; else if (x.mm == 3) x.dd = 29; else x.dd = 30; x.mm--; if (x.mm == 0) {
x.mm = 12; x.yy--; } } else if ((x.mm == 2 || x.mm == 4 || x.mm == 6 || x.mm == 9 || x.mm == 11) && x.dd == 0) {
x.dd = 31; x.mm--; } } else {
//非闰年 if ((x.mm == 1 || x.mm == 3 || x.mm == 5 || x.mm == 7 || x.mm == 8 || x.mm == 10 || x.mm == 12) && x.dd == 0) {
if (x.mm == 8 || x.mm == 1) x.dd = 31; else if (x.mm == 3) x.dd = 28; else x.dd = 30; x.mm--; if (x.mm == 0) {
x.mm = 12; x.yy--; } } else if ((x.mm == 2 || x.mm == 4 || x.mm == 6 || x.mm == 9 || x.mm == 11) && x.dd == 0) {
x.dd = 31; x.mm--; } } if (x.yy == 1 && x.mm == 1 && x.dd == 1) flag = 0; } return res;}

要是有空的希望大家来我自建的博客看看!

转载地址:http://fkhzi.baihongyu.com/

你可能感兴趣的文章
如何在三个月内学会一门外语?
查看>>
看看你对Linux到底了解多少?
查看>>
网上看到的:ARM入门最好的文章(转)
查看>>
中国最美情诗100句
查看>>
javascript注册window的onload事件问题研究
查看>>
客户端技术分页控件javascript+css,可用于任何服务器端技术
查看>>
学习Swing 的网站[转]
查看>>
Google App engine 的第一个应用 midispot
查看>>
提问的智慧
查看>>
关于dom4j无法解析xmlns问题及生成非UTF-8字符集乱码问题的解决
查看>>
很好的一篇文章 如果让我重做一次研究生 王汎森
查看>>
保护U盘批处理文件
查看>>
hibernate 自动导入sql 文件import.sql 国际化编码的问题的解决方案
查看>>
第七颗头骨 & 忘魂花 凤凰
查看>>
李小龙哲学之言
查看>>
[心情] 如果有一天
查看>>
[Linux] 常用 linux 系统命令及维护备忘
查看>>
[Linux] 关于 Ext4 HowTo
查看>>
[杂记] 新年物语&关于Mysql引擎性能测试
查看>>
[心得] 近期更新&关于Infobright
查看>>