杭电ACM 1005 java

Anumbersequenceisdefinedasfollows:f(1)=1,f(2)=1,f(n)=(A*f(n-1)+B*f(n-2))mod7.GivenA,B... A number sequence is defined as follows:
f(1) = 1, f(2) = 1, f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
Given A, B, and n, you are to calculate the value of f(n).
The input consists of multiple test cases. Each test case contains 3 integers A, B and n on a single line (1 <= A, B <= 1000, 1 <= n <= 100,000,000). Three zeros signal the end of input and this test case is not to be processed.
For each test case, print the value of f(n) on a single line.
一开始我用的递归,但是报Memory Limit Exceeded,我就没用递归了。
import java.math.BigInteger;
import java.util.Scanner;
public class Main{
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a, b;
int n;
while (in.hasNext()) {
a = in.nextInt();
b = in.nextInt();
n = in.nextInt();
// 1 <= A, B <= 1000, 1 <= n <= 100,000,000
if (a < 1 & a > 1000 & b < 1 & b > 1000 & b < 1 & a > 100000000)
System.exit(0);
if (a == 0 & b == 0 & n == 0)
System.exit(0);
BigInteger f[] = new BigInteger[n];
f[0] = BigInteger.valueOf(1);
f[1] = BigInteger.valueOf(1);
for (int i = 2; i < f.length; i++) {
f[i] = (f[i - 1].multiply(BigInteger.valueOf(a)).add(f[i - 2]
.multiply(BigInteger.valueOf(b)))).remainder(BigInteger
.valueOf(7));
//f(n) = (A * f(n - 1) + B * f(n - 2)) mod 7.
}
System.out.println(f[n - 1]);
}
}
}一直报错,我试了给的例子“1 1 3”和“1 2 10”,结果2和5是对的。是哪里错了呢?
展开
 我来答
xin5739a
2014-03-16 · TA获得超过139个赞
知道小有建树答主
回答量:184
采纳率:0%
帮助的人:174万
展开全部
if (a < 1 && a > 1000 && b < 1 && b > 1000 && b < 1 && a > 100000000)
System.exit(0);
这句你用的是& 不对 还有就是你这个做法不行 BigInteger f[] = new BigInteger[n]; 当n=100000000时开不了这么大的数组 时间复杂度也不行 必定超时
追问
如果不用数组用什么保存f(n)呢?泛型行吗?还是其他的什么?
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式