java – 优化代码以查找给定数量N的阶乘的单位数
发布时间:2020-12-15 04:50:09 所属栏目:Java 来源:网络整理
导读:我在竞赛中尝试了一个问题,其确切陈述是这样的: 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 conta
我在竞赛中尝试了一个问题,其确切陈述是这样的:
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<cases){ 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 任何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); } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |