我在竞赛中尝试了一个问题,其确切陈述是这样的:

Given a number N. The task is to find the unit digit of factorial of given

number N.

Input:

First line of input contains number of testcases T. For each testcase, there

will be a single line containing N.

Output:

For each testcase, print the unit digit of factorial of N.

Constraints:

1 <= T <= 1000

1 <= N <= 1018

并提出以下代码:

import java.util.*;

import java.lang.*;

import java.io.*;

class GFG {

public static void main (String[] args) throws IOException{

BufferedReader reader =

new BufferedReader(new InputStreamReader(System.in));

int cases = Integer.parseInt(reader.readLine());

int i=0;

while(i

fact(Integer.parseInt(reader.readLine()));i++;

}

}

static void fact(int num){

int j,fact=1;

for(j=1;j<=num;j++){

fact=fact*j;

}

System.out.println(fact%10);

}

}

当使用自定义输入执行时,它会提供正确的输出,但是当尝试所有测试用例时,它会给出:“超出时间限制.优化代码”.我试图使用bufferedReader而不是Scanner类,但没有效果.我无法找到如何进一步优化此代码.有什么我想念的吗?

解决方法:

BufferedReader和Scanner之间的区别可能在这里不明显.如果您对代码进行基准测试,您可能会发现最重要的部分是因子计算.另外,我想不出更快的计算方法,但这里你可能没有必要.

让我们来看看前几个因子:

> 0! = 1 – >单位数为1

> 1! = 1 – >单位数为1

> 2! = 2 – >单位数是2

> 3! = 6 – >单位数为6

> 4! = 24 – >单位数为4

> 5! = 120 – >单位数字为0

任何6或更大的阶乘都是一些自然整数乘以5!,即120.所以,无论它们是什么,单位数字都是0.使用如此小的数据集,你可以创建一个全部的缓存选项而不是每次计算阶乘.例如.:

// The index is the factorial to be calculated, the value is the unit digit:

private static final int[] UNITS = new int[] {1, 1, 2, 6, 4};

private static void fact(int f) {

int unit = 0;

if (f <= 4) {

unit = UNITS[f];

}

System.out.println(unit);

}

标签:java,algorithm,performance,factorial

来源: https://codeday.me/bug/20190716/1473805.html

java单位数_java – 优化代码以查找给定数量N的阶乘的单位数相关推荐

  1. java 爬虫_Java原生代码实现爬虫(爬取小说)

    Java也能做爬虫. 现在提到爬虫人第一个想到的就是python,其实使用Java编写爬虫也是很好的选择,Java成熟的爬虫框架很多,下面给大家展示一个使用Java基础语言编写的爬取小说的案例: 实现 ...

  2. java找_Java基础之:查找

    Java基础之:查找 查找算法有:线性(顺序)查找,二分(折半)查找,插值查找等. 这里只写出线性和折半两种查找方式,其他查找方式在数据结构的笔记中写出. 线性(顺序)查找 线性查找即从要查找的序列中 ...

  3. java入库_Java实现商品的查找、添加、出库、入库操作完整案例

    本文实例讲述了Java实现商品的查找.添加.出库.入库操作.分享给大家供大家参考,具体如下: package com.jredu.oopch08; public class Goods1 { priv ...

  4. java开发怎么优化代码,代码优化,该如何处理

    当前位置:我的异常网» Java Web开发 » 代码优化,该如何处理 代码优化,该如何处理 www.myexceptions.net  网友分享于:2014-08-19  浏览:0次 代码优化 pu ...

  5. 数据结构系列——Java后缀树实现代码

    上一篇文章介绍了什么是后缀树以及后缀树的应用场景,同时结合Ukkonen算法论文细述了如何在O(n)时间内构建一颗后缀树,这一篇详细介绍如何使用Java实现的Ukkonen后缀树构建算法.完整代码看这 ...

  6. java判断字母是否为元音_Java程序查找给定字符是元音还是辅音

    在英语字母中,字符" a"," e"," i"," o"," u"是元音,其余字母是辅音.查找给定字 ...

  7. Java—— TCP协议(相关代码实现以及相关优化)

    代码运行的时候先运行服务端,然后在运行客户端 * TCP协议:* 1,客户端* 创建Socket连接服务器(指定IP地址,端口号)通过IP地址找到对应的服务器* 调用Socket的getInputSt ...

  8. java编写螺旋矩阵讲解_Java如何实现螺旋矩阵 Java实现螺旋矩阵代码实例

    本篇文章小编给大家分享一下Java实现螺旋矩阵代码实例,小编觉得挺不错的,现在分享给大家供大家参考,有需要的小伙伴们可以来看看. 给定一个包含 m x n 个元素的矩阵(m 行, n 列),请按照顺时 ...

  9. java 怎么从性能上优化代码_月薪上万做好这一步:程序员职场中必须掌握的的Java代码性能优化技巧...

    尽量指定类.方法的final修饰符 Java编译器会寻找机会内联所有的final方法,内联对于提升Java运行效率作用重大,具体参见Java运行期优化.此举大概能够使性能平均提高50%. 尽量重用对象 ...

最新文章

  1. Nginx源码分析--数据对齐posix_memalign和memalign函数
  2. 云计算究竟是什么呢?“汇新杯”新兴科技成果专项赛之——云计算
  3. Oracle 数据泵(IMPDP/EXPDP)导入导出总结
  4. 一篇文章带你从认识Python装饰器到熟练使用
  5. 双屏怎么快速切换鼠标_在笔记本上实现双屏设计,怎么做到的?
  6. First C program
  7. 扇贝有道180910每日一句
  8. 悬镜安全宣布完成数千万元Pre-A轮融资
  9. 动视暴雪消费产品集团首次亮相2018年中国授权展
  10. 工程计算——实战:追赶法扰动分析
  11. 记住鲁迅的所有文章,因为他具有深远的意义,在当下意义重大。
  12. SSL构建单双向https认证
  13. 抖音是一款什么样的短视频软件?
  14. mysql启动参数(/etc/my.cnf)详解汇总
  15. Js判断是否为数字,是否为空,是否为整形,是否为浮点型,是否为对象
  16. android 百度音乐 api,[新]百度mp3接口(baidu mp3 api)
  17. 坐标反算c语言程序,测量坐标计算程序
  18. vue+ElementUI的树形菜单背景颜色修改
  19. 无法安装或运行此应用程序。该应用程序要求首先在“全局程序集缓存(GAC)中安装程序集MySQL版本6.7.4”
  20. java entry getvalue_Java Entry.getValue方法代碼示例

热门文章

  1. python爬虫开发 从入门到实战 pdf 谢乾坤_python字符串和整数相互转换的实例分享...
  2. python文本词频统计是什么_python 大批量文本分词 以及词频统计 (高效处理案例)...
  3. Windows重装Anaconda3失败解决方案【重装失败10来次首次成功的案例!】
  4. Fiddler利用Xposed框架+JustTrustMe抓取手机APP数据
  5. 【TensorFlow】 基于视频时序LSTM的行为动作识别
  6. 实时手势识别 【手部跟踪】Mediapipe中的hand
  7. CentOS7.0下Hadoop2.7.3的集群搭建
  8. mysql galera status_MySQL galera cluster集群的监控
  9. java base64 加解密_java Base64加解密
  10. c# 低功耗蓝牙_c# - 如何使用C#手动绑定到WinForm中的蓝牙低能耗设备? - 堆栈内存溢出...