看这个题之前,首先在题目的最后一行给出了所有给定的测评样例的时间不会超过10的18次方。java中的long型数据占八个字节,同时表示范围为-2^64 ~ 2^64。大概也就是1.8 x 10^19,故此题可以采用long型数据去接收输入参数,从而求解:
方法1:
package com.lxz.demo01;
import java.util.Date;
import java.util.Scanner;
public class demo03 {
public static void main(String[] args) {
Scanner scanner = new Scanner(System.in);
long time = scanner.nextLong();
// 题干中提到毫秒不用显示又因为输入的是毫秒故直接舍去三位数
time/=1000;
/**
* 由于题干只用表示 时 分 秒
* 故 我们只需要利用求余天数的秒 即可
*/
// 得到 时 分 秒 对应和的秒数
time%=(24*60*60);
// 得到小时数
long H = (int)time/(60*60);
// 得到 分 秒 对应和的秒数
time%=(60*60);
int M = (int)time/(60);
// 得到 秒数
time%=60;
int S = (int)time;
if(H<10){
System.out.print("0"+H);
}else{
System.out.print(H);
}
if(M<10){
System.out.print(":0"+M+":");
}else{
System.out.print(":"+M+":");
}if(S<10){
System.out.print("0"+S);
}else{
System.out.print(S);
}
scanner.close();
}
}
方法2:利用Java中自带的Date类
package com.lxz.demo01;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Scanner;
public class demo04 {
public static void main(String[] args) {
Scanner sc=new Scanner(System.in);
long n=sc.nextLong();
/**
* 此处为什么需要 减去 8h 的秒数
* 因为中国属于东八区 东八区计算机的开始时间为: 1900-01-01 8:00:00
*/
// 求出 H M S 对应的秒数之和
n-=8*60*60*1000;
/**
* Date类对象,分配 Date 对象并初始化此对象,以表示自从标准基准时间(称为“历元(epoch)”,
* 即 1970 年 1 月 1 日 00:00:00 GMT)以来的指定毫秒数。
*/
Date date=new Date(n);
/**
* 时间对象,我们在展示页面时,可能会想要不同的格式输出,通过SimpleDateFormat来设置不同的格式 以字符串类型输出
* yyyy : 年
* MM : 月
* dd : 日
* HH : 小时(24小时制)
* hh : 小时(12小时制)
* mm : 分钟
* ss : 秒
* S : 毫秒
* D : 一年中的第一几天
* F : 一个月中的第几个星期(通过这个月的天数除7,例如5号那就是属于第一个星期)
* W : 一个月中的第几个星期(根据实际情况计算)
* w : 一年中的第几个星期
* z : 时区
* .format 是指格式化输出
*/
System.out.println(new SimpleDateFormat("HH:mm:ss").format(date));
}
因为这是我刚开始用java刷算法题,API也都不熟悉,第二种方法参考了其他博主的: