这是我参与11月更文挑战的第23天,活动详情查看:2021最后一次更文挑战
7-4 然后是几点
有时候人们用四位数字表示一个时间,比如 1106 表示 11 点零 6 分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,例如 5 点 30 分表示为 530;0 点 30 分表示为 030。注意,第二个数字表示的分钟数可能超过 60,也可能是负数。
输入格式:
输入在一行中给出 2 个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即 5 点 30 分表示为 530;0 点 30 分表示为 030。流逝的分钟数可能超过 60,也可能是负数。
输出格式:
输出不多于四位数字表示的终止时间,当小时为个位数时,没有前导的零。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
结尾无空行
输出样例:
1310
结尾无空行
解题思路
这一题主要是对于时间的处理,我们将时间用int型变量存储,通过除法与求余的方法将小时与分钟分割开来。
获取到小时数与分钟数,将要加的分钟数与分钟数做运算,这里需要分情况讨论,其中要加分钟数分为正负两种情况。
正负又各分两种情况。以正值举例,要加分钟数与分钟数做运算后可能超过60,对于超过60的那种情况,我们就要做额外的处理。同理,要加分钟数为负值时,也要做类似的处理。
比如 1120 ,分钟数为20 ,题目给出的要加分钟数为 110 ,加上后为 130,与60做取余运算,得到2,所以小时数要加上2。与60做除运算得到结果为10,所以最终分钟数为10。
最后就是对结果的处理,当分钟数为个位时,要补0,与格式一致。当小时为个位数时,没有前导的零。
代码
注意点
1.对于时分的拆分
2.结果中分钟数小于十需要补充0
package PTA;
import java.util.Scanner;
public class T04 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
int time=sc.nextInt();
int pass=sc.nextInt();
int ss=time%1000%100;
int hh=(time-ss)/100;
ss+=pass;
if(ss<0) {
int num=0;
while(ss<=0) {
ss+=60;
num++;
}
hh-=num;
}else {
hh+=ss/60;
ss=ss%60;
}
if(ss<10) {
System.out.print(hh+"0"+ss);
}
else
System.out.print(hh+""+ss);
}
}