第4关:计算日期
我们吃的食物都有保质期,现在食品监督管理局想要制作一个能准确计算食品过期日期的小程序,需要请你来进行设计。
例如:A食品在2018年1月1日生产,保质期是20
天,则它的过期日期在2018年1月21日。
补全函数string getDate(string releaseDate,int day)
其中releaseDate
表示食品出厂日期day
表示保质期,请根据传入的数据计算食品的过期日期,格式为yyyy-mm-dd
即4
位年份2
位月份2
位日期。比如:2015-02-19
请严格按照格式书写,不能出现其它文字或符号,并将最终结果做为函数的返回值返回。
样例1:
输入:2016-01-01
,20
输出:
2016-01-21
#include<iostream>
#include<string.h>
#include<cstdio>
using namespace std;
string getDate(string releaseDate,int day){
int i=0;
int y=0,m=0,d=0;
while(releaseDate[i]!='-'){
y=y*10+releaseDate[i]-'0'; //年y
i++;
}
i++;
while(releaseDate[i]!='-'){
m=m*10+releaseDate[i]-'0'; //月m
i++;
}
i++;
while(i<releaseDate.length()){
d=d*10+releaseDate[i]-'0'; //日d
i++;
}
int mon[13]={0,31,28,31,30,31,30,31,31,30,31,30,31};
d+=day;
if(m==2) //考虑润年的二月
mon[2]=28+(y%4==0&&y%100!=0||y%400==0);
while(d>mon[m]){
d-=mon[m];
m=(m==12)?1:m+1;
if(m==1)
y++;
else if(m==2)
mon[2]=28+(y%4==0&&y%100!=0||y%400==0);
}
char yy[11],mm[3],dd[3];
sprintf(yy,"%d",y); //将整型数转换成字符数组
sprintf(mm,"%d",m);
sprintf(dd,"%d",d);
strcat(yy,"-"); //以特定的格式将代表年月日的字符串连接
strcat(yy,mm);
strcat(yy,"-");
strcat(yy,dd);
return yy;
}
int main(){
string s=getDate("2016-02-22",30);
for(int i=0;i<s.length();i++)
cout<<s[i];
cout<<endl;
return 0;
}
体会:学会如何去计算日期。