37题-重温A+B(这道题对我最大的价值就是复习了对输入非法和输出溢出的判断以及相应的处理)
/*
*题目:A和B都是由3个整数组成,分别表示时、分、秒,比如,假设A为34 45 56,就表示A所表示的时间是34小时45分钟56秒
输入数据每行有6个整数AH,AM,AS,BH,BM,BS,分别表示时间A和B所对应的时分秒
输出A+B,每个输出结果也是由时分秒3部分组成,同时分和秒的取值范围为0~59,每个输出占一行,并且所有的部分都可以用32位整数表示
*/
#include <iostream>
#include <math.h>
using namespace std;
int noj_037()
{
int AH, AM, AS, BH, BM, BS;
int hours = 0, minutes = 0, seconds = 0;
cout << "请输入A和B的对应值:";
cin >> AH >> AM >> AS >> BH >> BM >> BS;
while (cin.fail()) //判断输入溢出
{
cout << "A或B的小时数溢出,请重新输入:";
cin.clear(); //重置cin的错误标识
cin.sync(); //清空输入流
cin >> AH >> AM >> AS >> BH >> BM >> BS;
}
seconds = (AS + BS) % 60;
minutes = ((AM + BM) + (AS + BS) / 60) % 60;
hours = (AH + BH) + ((AM + BM) + (AS + BS) / 60) / 60;
if (hours < AH || hours < BH) //判断输出是否溢出
{
cout << "输入的小时数过大,和溢出";
return 0;
}
cout << hours << " " << minutes << " " << seconds;
return 0;
}