首页 技术 正文
技术 2022年11月14日
0 收藏 913 点赞 3,336 浏览 2468 个字

6-3 退休日期推算 (10分) 

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

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

函数接口定义:

DateG days2Date(int x);{//from:{1,1,1} + 100-->{1,4,11}
int Days(DateG x);// {2,,4,11} return 465 from{1,1,1}

 

裁判测试程序样例:

#include <iostream>
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;
}
相关推荐
python开发_常用的python模块及安装方法
adodb:我们领导推荐的数据库连接组件bsddb3:BerkeleyDB的连接组件Cheetah-1.0:我比较喜欢这个版本的cheeta…
日期:2022-11-24 点赞:878 阅读:9,497
Educational Codeforces Round 11 C. Hard Process 二分
C. Hard Process题目连接:http://www.codeforces.com/contest/660/problem/CDes…
日期:2022-11-24 点赞:807 阅读:5,910
下载Ubuntn 17.04 内核源代码
zengkefu@server1:/usr/src$ uname -aLinux server1 4.10.0-19-generic #21…
日期:2022-11-24 点赞:569 阅读:6,744
可用Active Desktop Calendar V7.86 注册码序列号
可用Active Desktop Calendar V7.86 注册码序列号Name: www.greendown.cn Code: &nb…
日期:2022-11-24 点赞:733 阅读:6,498
Android调用系统相机、自定义相机、处理大图片
Android调用系统相机和自定义相机实例本博文主要是介绍了android上使用相机进行拍照并显示的两种方式,并且由于涉及到要把拍到的照片显…
日期:2022-11-24 点赞:512 阅读:8,137
Struts的使用
一、Struts2的获取  Struts的官方网站为:http://struts.apache.org/  下载完Struts2的jar包,…
日期:2022-11-24 点赞:671 阅读:5,301