问题:超长阶乘(https://www.hackerrank.com/challenges/extra-long-factorials/problem)约束:1<n<=100
我在做一个有效的方式,加上它的解决方案在网上仍然可用,当我提交代码,它的tle。下面是我的代码
public static void multiply(ArrayList<Integer> prod,int i)
{
int carry=0;
for(int j=0;j<prod.size();j++)
{
int currp=prod.get(j)*i+carry;
prod.add(j,currp%10);
carry=currp/10;
}
while(carry>0)
{
prod.add(carry%10);
carry/=10;
}
}
// Complete the extraLongFactorials function below.
static void extraLongFactorials(int n) {
ArrayList<Integer> prod= new ArrayList<>();
prod.add(1);
for(int i=2;i<n;i++)
multiply(prod,i);
for(int i=prod.size()-1;i>=0;i--)
System.out.print(prod.get(i));
System.out.println();
}
3条答案
按热度按时间gr8qqesn1#
所以我在代码中犯了两个错误。现在我的代码被提交了。下面是正确的代码-
jvlzgdj92#
java有提供任意精度的内置类。使用
BigInteger.valueOf(long)
以及BigInteger.multiply(BigInteger)
喜欢d4so4syb3#
你的代码有一些严重的错误。
我测试了将其粘贴到类中并添加一个main方法:
您的代码将为
1
.您的代码返回“1”作为
2
,这是错误的(应该是“2”)您的代码无法计算
3
-它从不停止我故意不纠正你的错误-试着自己去发现并修复它们(使用调试器)。
好消息是:代码中有两个bug。修正这些,你的代码就会通过测试。