PAT (Basic Level) 1026 程序运行时间 (15 point(s))

// 14分代码
#include <bits/stdc++.h>
using namespace std;

int main() {
	int hh, mm, ss, C1, C2; 
	// 读取C1 C2 
	cin >> C1 >> C2;
	
	ss = (C2 - C1) / 100;
	//转换为 hh mm  
	mm = ss / 60; 
	hh = mm / 60;
	mm %= 60;
	
	// 算出ss 0.5秒以上+ 1 否则向下取整
	if(ss % 60 >= 30)
		ss = ss % 60 + 1;
	else 
		ss %= 60;
	
	// 两位格式输出 
	printf("%02d:%02d:%02d", hh, mm, ss);	
}
// 全部AC
#include <bits/stdc++.h>
using namespace std;

int main() {
	int hh, mm, ss, C1, C2; 
	// 读取C1 C2 
	cin >> C1 >> C2;
	int tmp = C2 - C1;
	// 算出ss 0.5秒以上+ 1 否则向下取整
	if(tmp % 100 >= 50)
		ss = tmp / 100 + 1;
	else 
		ss = tmp / 100;	
		
	hh = ss / 3600, ss %= 3600; 
	mm = ss / 60, ss %= 60; 
	
	// 两位格式输出 
	printf("%02d:%02d:%02d", hh, mm, ss);	
}

最开始以为是s为奇数时候+1了,因为“四舍五入”想到其他题目的解法。但提交错误之后想了想,四舍五入的实质应该是被除数的余数超过除数一半,得到浮点数大于等于0.5时,可以四舍五入。在这想法下,奇偶的四舍五入只能够是其中一个特例。后面算出ss改成用这个方法。

if(ss % 60 >= 30)
        ss = ss % 60 + 1;
else 
        ss %= 60; 

但是这样会差最后一个测试点不通过,看了看其他代码,原来要最开始clock转换成ss,打点转换为ss的时候要四舍五入。而不是clock转成ss,ss最后求余得到实际的s,这实际差了一步转换。 

if(tmp % 100 >= 50)
        ss = tmp / 100 + 1;
else 
        ss = tmp / 100;


hh = ss / 3600, ss %= 3600; 
mm = ss / 60, ss %= 60;  

mm = ss / 60, ss %= 60; 
hh = mm / 60, mm %= 60;

参考代码(上)的方法是ss直接转换成hh和mm,所以需要从高位到低位转换。但后面想了想,实际上时间转换类似进制转换,这里就是十进制转换成六十进制,所以也可以从低位向高位转换。这可以套模板(下)放进去,感觉写起来方便一点。( 进位的时候除法,当前位求余)

参考代码

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值