您的位置:首页 > 其它

华为 2014 机试题

2013-10-17 01:12 288 查看
输入整数秒 ,按照"000:00:00:00"格式输出时间,,时间最大值999(天),不考虑溢出

代码除去溢出判断之后有问题,即当输入大于int最大值后,变为负值,此时一直输出

将main中while循环改为如下,则会出现连续输出的情况, 属于cin的问题吧? 具体我还不知道

while(1)

{

cin>>second;

if(second > ma)//大于最大值

second = ma;

cout<<getShow(second)<<endl;

}

code:

int day = 24* 60*60;

int hour = 60*60;

int mini = 60;

int getDay(int sec)

{

if(sec>= 0)

return sec/day;

return 0;

}

int getHour(int sec)

{

sec = sec% day;

return sec/hour;

}

int getMinituate(int sec)

{

sec = sec % hour;

return sec / mini;

}

int getSecond(int sec)

{

return sec % 60;

}

string getShow(int second)

{

int d = getDay(second);

int h = getHour(second);

int m = getMinituate(second);

int sec = getSecond(second);

string str = "000:00:00:00";//华为要求的输出格式

char c ;

if(d/100 >= 10)

{

c = '0' + 9 ;

day = day%100;

}

else

c = '0' + d/100 ;

str[0] = c;

str[1] = '0'+(d%100) / 10;

str[2] = '0'+ d%10;

str[4] = '0' + h/10;

str[5] = '0' + h%10;

str[7] = '0' + m/10;

str[8] = '0' + m%10;

str[10] = '0' + sec/10;

str[11] = '0' + sec%10;

return str;

}

int main(void)

{

int ma = 999*day + 23* hour + 59*mini + 59;

int second = 0;

while(1)

{

cin>>second;

if(second > ma)//大于最大值

second = ma;

else if(second < 0)

second = 0;//小于0 华为机试时不考虑

cout<<getShow(second)<<endl;

}

return 0;

}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: