【发布时间】:2014-07-13 22:00:30
【问题描述】:
问题陈述:
编写一个方法whatTime,它接受一个int,秒,表示从某天午夜开始的秒数,并返回一个格式为“::”的字符串。这里,表示自午夜以来的完整小时数,表示自最后一个完整小时结束以来的完整分钟数,并表示自最后一个完整分钟结束以来的秒数。 、 和 中的每一个都应该是一个整数,没有额外的前导 0。因此,如果秒为 0,则应返回“0:0:0”,而如果秒为 3661,则应返回“1:1:1”
我的算法:
这是我的算法应该如何处理输入 3661:
- 3661/3600 = 1.016944 -> 这意味着小时数是 1
- 减去经过的总小时数,即 1.016944-1=0.016944
- 将此乘以 60,即 0.016944*60=1.016666 -> 经过的分钟数等于 1
- 减去经过的总分钟数,即 1.01666-1=0.01666。将其乘以 60。这将得出经过的秒数。
但是产生的输出是 1:1:0。我尝试使用打印语句,看起来“answer3”变量的值为 0.999,这就是打印整数部分 (0) 的原因。我尝试使用 Math.ceil() 函数对值进行四舍五入,并产生正确的输出。但是,当我提交代码 (TopCoder SRM 144 Div2) 时,我只能获得大约 60/250 分。任何改进算法的见解都会有所帮助。
public class Time
{
public String whatTime(int seconds)
{
double answer1,answer2,answer3; int H;
answer1=(double)seconds/3600;
H=(int)answer1;
answer2=(double)((answer1-H)*60);
int M=(int)answer2;
answer3=answer2-M;
answer3=(double)answer3*60;
int S=(int)answer3;
String answer=Integer.toString(H);
answer=Integer.toString(H)+":"+Integer.toString(M)+":"+Integer.toString(S);
return answer;
}
}
【问题讨论】:
-
使用
long值而不是double。在几秒钟内做你的减法。并学习如何使用%余数运算符。
标签: java floating-point integer double