华为 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;
}
代码除去溢出判断之后有问题,即当输入大于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;
}
相关文章推荐
- MFC 界面风格问题
- white lee
- linux学习之dnw使用
- IP数据包格式
- 在win7系统中安装SQL2005出现29506错误码的解决方案
- .net 批量上传文件代码
- 值得期待的cocos2d-x 3.0
- 1651. Shortest Subchain(bfs)
- 嵌入式ARM设计历程(二)
- cocos2d-x CCEditBox使用陷阱
- 字符串的一些操作
- 求解最长回文子串的暴力求解
- 点对点通信过程报文组装流程
- FileUpload控件
- C语言中可变参数函数实现原理
- 一个合格的程序员应该读过哪些书
- 数组中最大和的子数组
- 如何在微信微博上拍领导马屁?
- 以太网MAC帧格式
- 自主联想,用if语句的嵌套做自己的课程表