[华为机试真题][2014]64.实现两个合法时间相加

简介:

题目

描述:

给定两个合法的时间(格式固定: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;
}
目录
相关文章
|
10天前
习题6-3 使用函数输出指定范围内的完数 (20分)
习题6-3 使用函数输出指定范围内的完数 (20分)
|
7月前
OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
OJ题库:计算日期到天数转换、打印从1到最大的n位数 、尼科彻斯定理
33 0
【C语言】(错题整理) 寻找完数、字符串中各类字符数的统计、最大公约数和最小公倍数、回文数计算 (循环、函数相关内容)
本篇博客旨在整理最近在头歌遇到的难题、错题,对其进行分析并整理。 一、循环 1.寻找完数(计算因子例题) 一个数如果恰好等于它的因子之和,这个数就称为"完数"。 例如,6的因子为1、2、3,而6=1+2+3,因此6是"完数"。 编程序找出1000之内的所有完数。 这道题的首要任务就是找到各个数的因子,然后再对其进行判断。那么计算这个数的因子,我们可以用循环,试每个小于它的数对其进行求余%,结果为零即是因子。
每日一题---输入一个数判断是否为素数
每日一题---输入一个数判断是否为素数
每日一题---输入一个数判断是否为素数
华为机试每日一练--第十一题: 求int型正整数在内存中存储时1的个数
华为机试每日一练--第十一题: 求int型正整数在内存中存储时1的个数
华为机试每日一练--第十一题: 求int型正整数在内存中存储时1的个数
PTA 1087 有多少不同的值 (20 分)
当自然数 n 依次取 1、2、3、……、N 时,算式 ⌊n/2⌋+⌊n/3⌋+⌊n/5⌋ 有多少个不同的值?
48 0
PTA 1091 N-自守数 (15 分)
如果某个数 K 的平方乘以 N 以后,结果的末尾几位数等于 K,那么就称这个数为“N-自守数”。
100 0
【Day13】LeetCode力扣刷题[面试题 17.19. 消失的两个数字][70.爬楼梯][746. 使用最小花费爬楼梯]
了解[面试题 17.19. 消失的两个数字][70.爬楼梯][746. 使用最小花费爬楼梯]。
92 0
【Day13】LeetCode力扣刷题[面试题 17.19. 消失的两个数字][70.爬楼梯][746. 使用最小花费爬楼梯]
|
C语言
浙大版《C语言程序设计(第3版)》题目集 - 习题6-4 使用函数输出指定范围内的Fibonacci数(20 分)
浙大版《C语言程序设计(第3版)》题目集 - 习题6-4 使用函数输出指定范围内的Fibonacci数(20 分)
69 0
|
Java Python
每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!
每日一题:1894.找到需要补充粉笔的学生编号 简单的模拟题目,注意求余的技巧!
85 0