pta习题:退休日期推算
Posted simon5ei
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了pta习题:退休日期推算相关的知识,希望对你有一定的参考价值。
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
",Date2string(d2));
d2=Add(d2,-1000);
printf("%s
",Date2string(d2));
d2=_DateG("2020-1-23");
printf("%.2f
",(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 Year;
- Year.yy=1;
- Year.mm=1;
- Year.dd=1;
- while(x--){
- Year.dd++;
- if((Year.yy%4==0&&Year.yy%100!=0)||Year.yy%400==0){//是闰年
- if((Year.mm==1||Year.mm==3||Year.mm==5||Year.mm==7||Year.mm==8||Year.mm==10||Year.mm==12)&&Year.dd>31)
- {
- Year.dd=1;
- Year.mm++;
- if(Year.mm>12){
- Year.mm=1;
- Year.yy++;
- }
- }
- else if(Year.mm==2&&Year.dd>29){//闰年二月单独讨论
- Year.dd=1;
- Year.mm++;
- }
- else if((Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){
- Year.dd=1;
- Year.mm++;
- }
- }
- else{//非闰年
- if((Year.mm==1||Year.mm==3||Year.mm==5||Year.mm==7||Year.mm==8||Year.mm==10||Year.mm==12)&&Year.dd>31)
- {
- Year.dd=1;
- Year.mm++;
- if(Year.mm>12){
- Year.mm=1;
- Year.yy++;
- }
- }
- else if(Year.mm==2&&Year.dd>28){//二月单独讨论
- Year.dd=1;
- Year.mm++;
- }
- else if((Year.mm==2||Year.mm==4||Year.mm==6||Year.mm==9||Year.mm==11)&&Year.dd>30){
- Year.dd=1;
- Year.mm++;
- }
- }
- }
- return Year;
- }
- 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;
- }
以上是关于pta习题:退休日期推算的主要内容,如果未能解决你的问题,请参考以下文章