华为笔试题 计算下一秒

来源:互联网 发布:域名未通过所有权验证 编辑:程序博客网 时间:2024/06/15 17:51

按格式给定当前时间,输出该时间的下一秒时间,注意年份考虑平年和闰年

比如:

输入:2015/12/31 23:59:59

输入为:2016/01/01 00:00:00

输入:2016/02/29 23:59:59

输出:2016/03/01 00:00:00

#include<iostream>#include<string>#include<string.h>#include<vector>#include<algorithm>using namespace std;void solve(string str);int my_fun(string str);void my_fun2(string &str,int n);int main(){string str;while(getline(cin,str))//输入格式:2016/02/29 23:59:59{solve(str);}return 0;}void solve(string str){if(str.length()!=19)//格式不符合,直接返回{return;}int x;//2月的天数//按输入格式,手动将年、月、天、时、分、秒字符串取出string year=str.substr(0,4);//取年if((my_fun(year)%4==0&&my_fun(year)%100!=0)||my_fun(year)%400==0)//计算闰年的二月{x=29;//平年二月28,闰年二月29}else{x=28;}int data[12]={31,x,31,30,31,30,31,31,30,31,30,31};//一年中每个月的天数string mon=str.substr(5,2);//取月string day=str.substr(8,2);//取天string hour=str.substr(11,2);//取时string min=str.substr(14,2);//取分string sec=str.substr(17,2);//取秒int si,mi,hi,di,moni;//秒、分、时、天、月的进位,初始化为0,年没有考虑进位si=mi=hi=di=moni=yeari=0;//sif((my_fun(sec)+1)>59)//秒+1大于59,秒进位置1{sec="00";si=1;}else{my_fun2(sec,1);//计算秒+1的值,字符串的形式}//minif((my_fun(min)+si)>59)//分+si大于59,分进位置1{min="00";mi=1;}else{my_fun2(min,si);}//hourif((my_fun(hour)+mi)>23){hour="00";hi=1;}else{my_fun2(hour,mi);}//dayif((my_fun(day)+hi)>data[my_fun(mon)-1]){day="01";di=1;}else{my_fun2(day,hi);}//monif((my_fun(mon)+di)>12){mon="01";moni=1;}else{my_fun2(mon,di);}//yearmy_fun2(year,moni);cout<<year<<"/"<<mon<<"/"<<day<<" "<<hour<<":"<<min<<":"<<sec<<endl;}int my_fun(string str)//将string转int{int data=0;for(int i=0;i<str.length();i++){data=data*10+str[i]-'0';}return data;}void my_fun2(string &str,int n)//计算string+n的值,字符串的形式{int data=my_fun(str)+n;if(str.length()<=2){str[0]=data/10+'0';str[1]=data%10+'0';return;}else{for(int i=3;i>0;i--){str[i]=data%10+'0';data=data/10;}return;}}



0 0
原创粉丝点击