7-2 然后是几点 (15 分)
有时候人们用四位数字表示一个时间,比如1106表示11点零6分。现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。当小时为个位数时,没有前导的零,即5点30分表示为530。注意,第二个数字表示的分钟数可能超过60,也可能是负数。
输入格式:
输入在一行中给出2个整数,分别是四位数字表示的起始时间、以及流逝的分钟数,其间以空格分隔。注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;流逝的分钟数可能超过60,也可能是负数。
输出格式:
输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
别人的代码:https://www.jianshu.com/p/955631f5e3da思路清晰,代码简洁
#include <stdio.h>
int main() {
int start, minutes, total, ret;
scanf("%d %d", &start, &minutes);
total = start % 100 + start / 100 * 60 + minutes;
ret = total / 60 * 100 + (total - total / 60 * 60);
printf("%d", ret);
return 0;
}
我的代码(负面教材)
//这是我写的一坨代码,思路不清晰,代码冗杂,惭愧
//作为负面教材,深刻的认识到思维的重要性,以后写代码不能着急,得在先理清思路否则浪费时间
#include <stdio.h>
int main(void)
{
int time_now;
int minutes;
int hour_part;
int minutes_part;
int time_now_hour;
int time_now_minutes;
int final_time;
int final_time_hour;
int final_time_minutes;
scanf("%d %d", &time_now, &minutes);
//把输入的数分解为小时和分钟两部分
time_now_hour = time_now / 100;
time_now_minutes = time_now % 100;
//流逝的分钟数换算成小时和分钟数
hour_part = minutes / 60;
minutes_part = minutes % 60;
final_time_hour = time_now_hour + hour_part;
final_time_minutes = time_now_minutes + minutes_part;
if(final_time_minutes >= 60)
{
final_time_hour += final_time_minutes / 60;
final_time_minutes %= 60;
}
else if(final_time_minutes < 0)
{
final_time_hour += final_time_minutes / 60 - 1;
final_time_minutes = 60 + final_time_minutes % 60;
}
final_time = final_time_hour * 100 + final_time_minutes;
printf("\n%d", final_time);
}