思路简析
我的思路:
我选择的是非常常规的思路,首先求出输入时间的小时和分钟部分,再求经过时间的小时与分钟部分。最后进行加减法得到新的时间。
值得注意的是:
- 最后的相加时,原来时间的分钟部分与过去时间的分钟部分相加可能会大于60,这里要注意进位到小时部分。
- 当小时为个位数时,没有前导的零。
- 经过的时间可能会为负数
经过思考发现这种思路有点复杂,在处理负数时有点冗余。
参考思路:
【PTA】基础编程题讲解-C语言7-2然后是几点_哔哩哔哩_bilibili
看了下其他解法,发现直接利用分钟来进行运算会简单一些,具体代码见下栏。
解法代码
我的解法
#include<stdio.h>
int main() {
int oldTime; //表示当前时间
int passTime; //表示经过的时间(表示为分钟)
int newTime; //最终的时间
int flag = 0; //用于判断输入的passtime是否为负数 1为是 0为否
scanf("%d %d",&oldTime, & passTime);
if (passTime < 0) { //当经过的时间为负数时,取其相反数化为正数
passTime = -passTime;
flag = 1;
}
int oldHour = oldTime / 100; //求出输入时间的小时部分
int oldMinute = oldTime % 100; //求出输入时间的分钟部分
int passHour = 0; //经过时间的小时部分
int passMinute = 0; //经过时间的分钟部分
while (passTime >= 60) { //利用while循环将经过时间的小时和分钟部分求出来
passHour++;
passTime -= 60;
passMinute = passTime;
}
if (oldMinute + passMinute >= 60) { //当分钟位大于60,进行进位
passHour++;
passMinute -= 60;
}
if (flag) { //经过时间为负数时
int newHour = oldHour - passHour;
int newMinute = oldMinute - passMinute;
newTime = newHour * 100 + newMinute;
}else{ //经过时间为正数时
int newHour = oldHour + passHour;
int newMinute = oldMinute + passMinute;
newTime = newHour * 100 + newMinute;
}
printf("%d",newTime);
return 0;
}
测试情况如下:
对于负数没处理好,输出格式也不对
参考解法
#include<stdio.h>
int main()
{
int oldTime, passTime, hour, minute;
scanf("%d%d", &oldTime, &passTime);
minute = oldTime % 100;
hour = oldTime / 100;
minute += passTime;
while(minute < 0)
{
minute += 60;
hour--;
}
hour += minute / 60;
minute %= 60;
printf("%d%02d\n",hour,minute);
return 0;
}
测试通过