問題陳述:損失的精度 - Java的
寫方法whatTime,這需要一個int,秒,表示自午夜某一天的秒數,並返回格式化爲一個字符串「::」 。此處表示自午夜以來的完整小時數,表示自上次完成小時結束以來的完整分鐘數,並表示自上次完整分鐘結束以來的秒數。每個,並且應該是一個整數,沒有額外的前導0。因此,如果秒是0,你應該回到 「0:0:0」,而如果秒是3661,您應該返回 「1:1:1」
我的算法:
這裏是如何我的算法應該用於輸入3661工作:
- 三千六分之三千六百六十一= 1.016944 - >這意味着的小時數是1
- 減去即1.016944-1 = 0.016944 經過的小時數
- 乘以60即0.01694 4 * 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'。在幾秒鐘內做你的減法。並學習如何使用'%'餘數運算符。 –