
🚗🚗🚗🚗🚗🚗🚗 数据结构专栏🚗🚗🚗🚗🚗🚗🚗🚗🚗🚗
🛹🛹🛹🛹🛹🛹🛹小知识总结分享🛹🛹🛹🛹🛹🛹🛹🛹🛹🛹
🚀🚀🚀🚀🚀🚀🚀题目历练场🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀🚀
🚢🚢🚢🚢🚢🚢🚢功能包与集合类介绍🚢🚢🚢🚢🚢🚢🚢🚢🚢
🛞🛞🛞🛞🛞🛞🛞java EE🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞🛞
😘😘😘😘😘😘😘Agent大模型😘😘😘😘😘😘😘😘😘😘😘😘
今天和大家一起分享一道基础的算法题目
- 题目来源 : HDOJ

cpp
#include <iostream>
using namespace std;
/*
这个题目的A和B不是简单的整数,
而是两个时间,A和B 都是由3个整数组成,分别表示时分秒,
比如,假设A为34 45 56,就表示A所表示的时间是34小时 45分钟 56秒。
*/
int main07() {
int t;
int ah, am, as;
int bh, bm, bs;
cin >> t;
while (t--) {
cin >> ah >> am >> as;
cin >> bh >> bm >> bs;
//对齐相加问题
ah += bh;
am += bm;
as += bs;
//进制处理 从地位到高位进行
am += as / 60;
as %= 60;
ah += am / 60;
am %= 60;
cout << ah <<' ' << am <<' ' << as << ' ' << endl;
}
return 0;
}
总结提炼
-
先全部直接对齐相加:同一维度的值先加在一起,不先考虑进位
as += bs; // 秒相加
am += bm; // 分相加
ah += bh; // 小时相加 -
从最低位开始依次处理进位(重点!必须低位→高位,不能反过来)
am += as / 60; // 秒溢出多少,加到分钟
as %= 60; // 秒保留余数ah += am / 60; // 分钟溢出多少,加到小时
am %= 60; // 分钟保留余数
- 低位:进位 = 当前值 / 进制基数 当前值 = 当前值 % 进制基数
- 把得到的进位加到上一位(高位)
- 最高位不需要取模,直接保留总和(小时没有上限)
- 关键点提炼
-
顺序不能颠倒:先加所有位 → 低位先进位,再处理高位
如果先处理高位再低位,低位产生的新进位就丢了。 -
公式通用:对于基数
base高位 += 当前位 / base
当前位 = 当前位 % base -
混合进制(每一位进制不一样)也可以套用这个流程,只是每轮的 base 换成对应进制。
- 我是Dylan
- 无限进步