华为 2014 机试题

输入整数秒 ,按照"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;
}

 

 

 

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值