问题陈述:
写一个方法whatTime,它取一个int,seconds,表示某天某午夜以来的秒数,并返回一个格式为" ::"的字符串。此处表示自午夜起的完整小时数,表示自上一个完整小时结束以来的完整分钟数,并表示自上一个完整分钟结束以来的秒数。每个,,和应该是一个整数,没有额外的前导0。因此,如果秒为0,则应返回" 0:0:0",如果秒为3661,则应返回" 1:1:1"
我的算法:
以下是我的算法应该如何用于输入3661:
然而,产生的输出是1:1:0。我尝试使用print语句,看起来' answer3'变量是0.999,这就是打印整数部分(0)的原因。我尝试使用Math.ceil()函数对值进行舍入,并生成正确的输出。但是,当我提交我的代码时,我只能得到大约60/250分(TopCoder SRM 144 Div2)。任何改进算法的见解都会有所帮助。
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;
}
}
答案 0 :(得分:3)
避免使用浮点值,并完全使用整数或长整数。
答案 1 :(得分:3)
public String whatTime(int seconds) {
int secondVal = seconds % 60;
int minutes = seconds / 60;
int minuteVal = minutes % 60;
int hours = minutes / 60;
int hourVal = hours % 24;
int daysVal = hours / 24;
String answer = "" + daysVal + ":" + hourVal + ":" + minuteVal + ":" + secondVal;
return answer;
}
可以更优雅地进行格式化,但这是基本想法。
答案 2 :(得分:0)
你可以通过使用ints来解决这个问题: