- 解题思路整理:
1.问题表现形式:计算时间差或者然后是几点
a.已知两个具体时间,求两者相差几时几分?
b.已知一个时间以及相差时间,计算然后是几点?
2.解决套路:
a.转换为相同进制(一般转换为:小一点的单位)
已知:小时与分钟 》》分钟
b.利用十进制计算,后再转化为原先进制格式
操作:分钟 》》小时分钟
e.g 1: 比较时间差。
输入两个时间,每个时间分别输入小时和分钟的值,
然后输出两个时间的差,
也以几小时几分钟表示。
#include<stdio.h>
int main()
{
int hour1, hour2, minute1, minute2;
int t1, t2;
int t;
scanf("%d %d", &hour1, &minute1);
scanf("%d %d", &hour2, &minute2);
t1 = hour1 * 60 + minute1;
t2 = hour2 * 60 + minute2;
t = t1 - t2;
printf("时间差是%d小时%d分钟\n", t/60, t%60);
return 0;
}
e.g 2: 然后是几点。
有时候人们用四位数字表示一个时间,比如1106表示11点零6分。
现在,你的程序要根据起始时间和流逝的时间计算出终止时间。
读入两个数字,第一个数字以这样的四位数字表示当前时间,第二个数字表示分钟数,
计算当前时间经过那么多分钟后是几点,结果也表示为四位数字。
当小时为个位数时,没有前导的零,即5点30分表示为530。
注意,第二个数字表示的分钟数可能超过60,也可能是负数。
输入格式:
输入在一行中给出2个整数,分别是四位数字表示的起始时间,以及流逝的分钟数,其间以空格分隔。
注意:在起始时间中,当小时为个位数时,没有前导的零,即5点30分表示为530;
流逝的分钟数可能超过60,也可能是负数。
输出格式:
输出四位数字表示的终止时间。题目保证起始时间和终止时间在同一天内。
输入样例:
1120 110
输出样例:
1310
#include<stdio.h>
int main(void)
{
int t1, past, t2;//t1:起始时间,past:经过的时间,t2:最终时间
int hour1, minute1, hour2, minute2;//hour,minute是由时间格式规范化后的
int total1, total2;//将整体的分钟值化为一个变量
scanf("%d %d", &t1, &past);
hour1 = t1 / 100;//妙用整数除法仍为整数
minute1 = t1 % 100;//妙用 整数取余运算仍为整数 且 100进制大于60进制,故不会出现少数的情况
total1 = hour1 * 60 + minute1;//total1:原先时间的总分钟数
total2 = total1 + past;//total2:过后时间的总分钟数
hour2 = total2 / 60;
minute2 = total2 % 60;
t2 = hour2 * 100 + minute2;
printf("%d\n", t2);
return 0;
}
- 总结:运算技巧(关于整数运算中 / 、% 的妙用)
- / :两个整数运算中使用此运算符所得的结果为实际值整数部分的值
- % :两个整数运算中使用此运算符所得的结果为实际值余数部分的值
- 注意:像英尺与米之间的转换,其中含有浮点数0.3048,则不可以使用这种取余运算符。
解决办法:
整数部分运用“/”运算符
余数部分采用(总数 - 整数)* 进制