刷题3——实现输入两个合法时间相加

描述:    给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果;注意,相加后的结果也必需是一个合法的时间;
附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间;
运行时间限制:    无限制
内存限制:    无限制
输入:    时分秒格式的时间字符串,如00:00:00
输出:    时分秒格式的时间字符串,如00:00:00

样例输入:    00:00:00 00:00:01
样例输出:    00:00:01
答案提示:    建议将时间转换为秒数计算

//定义一个时间结构

typedef struct
{
  int hh, mm, ss;
}Time;

int testTime(Time *t)
{
  if (t->hh>23 || t->hh<0 || t->mm>59 || t->mm<0 || t->ss>59 || t->ss<0)
  {
    if (t->hh==24)
    {
      if (t->mm==0 || t->ss==0)
      {
        return 0;
      }
    }
    return -1;
   }else
  return 0;
}

void addTime(Time t1, Time t2, Time *output)
{
  int time1 = t1.hh*60*60 +t1.mm*60 +t1.ss;
  int time2 = t2.hh*60*60 +t2.mm*60 +t2.ss;
  int time = time1+time2;
  double result;

  Time* resultTime = (Time *)malloc(sizeof(Time));
  resultTime->hh = time / (60*60);

  time %= (60*60);
  resultTime->mm = time / 60;
  time %= 60;
  resultTime->ss = time;

  result = testTime(resultTime);
  if(result == -1)
  {
    resultTime->hh -= 24;
  }
  output->hh = resultTime->hh;
  output->mm = resultTime->mm;
  output->ss = resultTime->ss;
}



int charToInt(char *ch){
int len = strlen(ch);
int k =10;
int sum = 0;
for(int i = 0; i < len ; ++i){
sum = sum * k + (ch[i] - ‘0‘);
}
return sum;
}

int countM(char* ch){
int len = strlen(ch);
int count =0;
int k = 0;
int sum =0;
char b[3][3];
for(int i = 0; i < len ; ++i){
if(ch[i] <= ‘9‘ && ch[i] >= ‘0‘ ){
b[count][k] = ch[i];
k++;
}else{
b[count][k] = ‘\0‘;
++count;
k = 0;
}
}
b[count][k] = ‘\0‘;
sum = charToInt(b[0]) * 60 * 60 + charToInt(b[1]) * 60 + charToInt(b[2]);
delete b;
return sum;
}

int main(){
char* ch1 = "23:12:56";
char* ch2 = "23:12:56";
//countM(ch);
int number1 = countM(ch1);
int number2 = countM(ch2);
int sum = number1 + number2;
int h = 0 , m = 0, s = 0;
s = sum % 60;
m = (sum / 60) % 60;
h = (sum / 60 /60)%24 % 60;
char ch[255];
if(h < 10){
cout<<"0"<<h;
}else{
cout<<h;
}
cout<<":";
if(m < 10){
cout<<"0"<<m;
}else{
cout<<m;
}
cout<<":";
if(s < 10){
cout<<"0"<<s;
}else{
cout<<s;
}
cout<<endl;
return 0;
}

时间: 2024-10-16 07:16:56

刷题3——实现输入两个合法时间相加的相关文章

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

题目 描述: 给定两个合法的时间(格式固定:hh:mm:ss,时间合法,不用考虑其它情况),输入两个时间相加后的结果:注意,相加后的结果也必需是一个合法的时间: 附合法时间定义:小时在[00-23]之间,分钟和秒分别是在[00-59]之间: 运行时间限制: 无限制 内存限制: 无限制 输入: 时分秒格式的时间字符串,如00:00:00 输出: 时分秒格式的时间字符串,如00:00:00 样例输入: 00:00:00 00:00:01 样例输出: 00:00:01 答案提示: 建议将时间转换为秒数

leecode刷题(8)-- 两数之和

leecode刷题(8)-- 两数之和 两数之和 描述: 给定一个整数数组 nums 和一个目标值 target,请你在该数组中找出和为目标值的那 两个 整数,并返回他们的数组下标. 你可以假设每种输入只会对应一个答案.但是,你不能重复利用这个数组中同样的元素. 示例: 给定 nums = [2, 7, 11, 15], target = 9 因为 nums[0] + nums[1] = 2 + 7 = 9 所以返回 [0, 1] 思路: 这道题其实很简单,我们可以直接用暴力搜索的方法,设置双重

OJ刷题之《输入三个整数,按由小到大的顺序输出》

题目描述 输入三个整数,按由小到大的顺序输出.分别使用指针和引用方式实现两个排序函数.在主函数中输入和输出数据. 输入 三个整数 输出 由小到大输出成一行,每个数字后面跟一个空格.由指针方式实现. 由小到大输出成一行,每个数字后面跟一个空格.由引用方式实现. 样例输入 2 3 1 样例输出 1 2 3 1 2 3 提示 主函数已给定如下,提交时不需要包含下述主函数 /* C++代码 */ int main() { void sort1(int *,int *,int *); void sort2

OJ刷题之《输入三个字符串,按由小到大的顺序输出》

题目描述 输入三个字符串,按由小到大的顺序输出.分别使用指针和引用方式实现两个排序函数.在主函数中输入和输出数据. 输入 3行字符串 输出 按照从小到大输出成3行.由指针方式实现. 按照从小到大输出成3行.由引用方式实现. 样例输入 cde afg abc 样例输出 abc afg cde abc afg cde 提示 主函数已给定如下,提交时不需要包含下述主函数 /* C++代码 */ int main() { void sort1(char *,char *,char *); void so

leetcode 刷题(2)--- 两数相加

给定两个非空链表来表示两个非负整数.位数按照逆序方式存储,它们的每个节点只存储单个数字.将两数相加返回一个新的链表. 你可以假设除了数字 0 之外,这两个数字都不会以零开头. 示例: 输入:(2 -> 4 -> 3) + (5 -> 6 -> 4) 输出:7 -> 0 -> 8 原因:342 + 465 = 807 解法: class Solution {public: ListNode* addTwoNumbers(ListNode* l1, ListNode* l2

LeetCode刷题 1. Two Sum 两数之和 详解 C++语言实现 java语言实现

Given an array of integers, return indices of the two numbers such that they add up to a specific target. You may assume that each input would have exactly one solution, and you may not use the same element twice. Example: Given nums = [2, 7, 11, 15]

LeetCode刷题之三:判断两个二叉树是否相同

题目为: Given two binary trees, write a function to check if they are equal or not. Two binary trees are considered equal if they are structurally identical and the nodes have the same value. 解题思路:这种题目也是递归操作简单 代码为: /** * Definition for binary tree * pub

华为OJ:计算两个自然时间相加

按要求一步步做就好 import java.util.Scanner; public class dateAdd { public static void main(String args[]){ Scanner input=new Scanner(System.in); String s1=input.next(); String s2=input.next(); int s11=Integer.parseInt(s1.substring(0, 2)); int s12=Integer.par

PTA 刷题与Z老师的头发

刷题与Z老师的头发 (10 分) 在Pintia上,每天Z老师出题.小盆友们刷题.Z老师的头发遵从以下规律: 1.每天生长出60根头发: 2.每出一道题,减少20根头发: 3.每天结束时统计累积做题情况: (1)若出的题全部被做出来,则Z老师产生“没题焦虑”,减少30根头发: (2)若小盆友做出来的题少于50%,则Z老师产生“学生不用功焦虑”,减少70根头发. 现给定连续N天的出题.刷题情况,请计算Z老师头发的变化情况. 输入格式: 第一行输入一个正整数N (N<20): 接下来N行,每行输入两