试题 历届真题 时间显示【第十二届】【省赛】【B组】

在这里插入图片描述
看这个题之前,首先在题目的最后一行给出了所有给定的测评样例的时间不会超过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也都不熟悉,第二种方法参考了其他博主的:

跳转到大哥

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值