【发布时间】:2018-11-06 00:32:24
【问题描述】:
考虑s(0) 和s(1) 是输入的序列,s(n) = s(n-1) * s(n-2) 是所有n >= 2。我想在s(n) 中找到尾随零的数量。我们可以假设:
-
n、s(0)和s(1)作为输入给出 n <= 40s(0) <= 20s(1) <= 20
以下是我的代码尝试。 n 大于 30 时不运行(运行时间很长)。还有其他方法可以计算尾随零的数量吗?
public class Soroco {
public static void main(String[] args) throws IOException {
BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
BigInteger n = new BigInteger(br.readLine());
BigInteger s0 = new BigInteger(br.readLine());
BigInteger s1 = new BigInteger(br.readLine());
BigInteger num = s(n, s0, s1);
System.out.println(num);
System.out.println(countTrailingZeroes(num));
}
static BigInteger s(BigInteger n, BigInteger s0, BigInteger s1) {
if (n.equals(new BigInteger("0")))
return s0;
else if (n.equals(new BigInteger("1")))
return s1;
else {
BigInteger n1=n.subtract(new BigInteger("1"));
BigInteger n2=n.subtract(new BigInteger("2"));
BigInteger n3=s(n1, s0, s1).multiply(s(n2, s0, s1));
return n3;
}
}
static int countTrailingZeroes(BigInteger num) {
String str = String.valueOf(num);
int count = 0;
for (int i = 0; i < str.length(); i++)
if (str.charAt(i) == '0')
count++;
return count;
}
}
【问题讨论】:
-
数对 5 和 2 和 10 的幂
-
Pkpnd 知道他的东西,阅读他的答案
-
如何计算一个数字中 2 的个数和 5 的个数
标签: java recursion sequence multiplication