标签:华为机试真题
题目
描述:
给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果;注意,相加后的结果也必需是一个合法的时间;
附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间;
运行时间限制:
无限制
内存限制:
无限制
输入:
时分秒格式的时间字符串,如00:00:00
输出:
时分秒格式的时间字符串,如00:00:00
样例输入:
00:00:00 00:00:01
样例输出:
00:00:01
答案提示: 建议将时间转换为秒数计算
代码
/*---------------------------------------
* 日期:2015-07-06
* 作者:SJF0115
* 题目:实现两个合法时间相加
* 来源:华为机试真题
-----------------------------------------*/
#include <iostream>
#include <string>
#include <vector>
#include <stack>
#include <algorithm>
using namespace std;
// 整型转换为string
string Int2Str(int num){
string str = "";
if(num == 0){
str = "0";
return str;
}//if
while(num){
str.insert(str.begin(),num % 10 + ‘0‘);
num /= 10;
}//while
return str;
}
// 两个合法时间相加
string TimeAdd(string t1,string t2){
int h1 = atoi(t1.substr(0,2).c_str());
int h2 = atoi(t2.substr(0,2).c_str());
int m1 = atoi(t1.substr(3,2).c_str());
int m2 = atoi(t2.substr(3,2).c_str());
int s1 = atoi(t1.substr(6,2).c_str());
int s2 = atoi(t2.substr(6,2).c_str());
int s = (s1 + s2) % 60;
int m = (m1 + m2 + (s1 + s2) / 60) % 60;
int h = (h1 + h2 + (m1 + m2) / 60) % 24;
string str = "";
if(h < 10){
str += "0";
}//if
str += Int2Str(h) + ":";
if(m < 10){
str += "0";
}//if
str += Int2Str(m) + ":";
if(s < 10){
str += "0";
}//if
str += Int2Str(s);
return str;
}
// 方法2
string TimeAdd2(string t1,string t2){
int h1 = atoi(t1.substr(0,2).c_str());
int h2 = atoi(t2.substr(0,2).c_str());
int m1 = atoi(t1.substr(3,2).c_str());
int m2 = atoi(t2.substr(3,2).c_str());
int s1 = atoi(t1.substr(6,2).c_str());
int s2 = atoi(t2.substr(6,2).c_str());
int total = h1 * 60 * 60 + m1 * 60 + s1 + h2 * 60 * 60 + m2 * 60 + s2;
int s = total % 60;
int m = total / 60 % 60;
int h = total / 60 / 60 % 24;
string str = "";
if(h < 10){
str += "0";
}//if
str += Int2Str(h) + ":";
if(m < 10){
str += "0";
}//if
str += Int2Str(m) + ":";
if(s < 10){
str += "0";
}//if
str += Int2Str(s);
return str;
}
int main(){
string t1,t2;
//freopen("C:\\Users\\Administrator\\Desktop\\acm.in","r",stdin);
while(cin>>t1>>t2){
cout<<TimeAdd(t1,t2)<<" "<<TimeAdd2(t1,t2)<<endl;
}//while
return 0;
}
版权声明:本文为博主原创文章,未经博主允许不得转载。
标签:华为机试真题
原文地址:http://blog.csdn.net/sunnyyoona/article/details/46775183