题目详情
给定a和n,计算a+aa+aaa+aaaa+...+a...a(n个a) 的和。
输入描述:
测试数据有多组,以文件结尾。每行输入a,n(1<=a,n<=1000000)。
输出描述:
由于结果可能比较大,所以请输出答案mod 1000000007。
import java.math.BigInteger;
import java.util.Scanner;
public class sum2 {
public static void main(String[] args) {
Scanner in = new Scanner(System.in);
int a,n;
BigInteger e = new BigInteger("0");
BigInteger x = new BigInteger("0");
BigInteger d = new BigInteger("10");
BigInteger mod = new BigInteger("1000000007");
BigInteger m ;
while (in.hasNext())
{
a = in.nextInt();
n = in.nextInt();
m = BigInteger.valueOf(n);
for (int i = 0; i < n; i++) {
e = e.add(d.pow(i).multiply(m.subtract(BigInteger.valueOf(i))));
}
System.out.println((BigInteger.valueOf(a)).multiply(e).mod(mod));
e = x;
}
in.close();
}
}
这是我的代码,最后的结果是效率低下,未通过,哪位大神能指点指点么?有更好的思路么?
谢谢!
------解决思路----------------------
你这个写法计算一组测试用例的时间复杂度是O(n^2),对于10^6的规模效率肯定是太低太低了。
可以这样
1
1 1
111
1111
。。。。
11111111
从最后一列开始,每一列的和递减1,可以一列一列的加,加完一列取一次余,避免溢出。这样的话时间复杂度是O(n),运行时间在几秒以内。其实这是一道典型的模拟题,就是用数组模拟加法运算。
------解决思路----------------------
递归。。。 。。。。。。。
------解决思路----------------------
(a+b)%c=(a%c+b%c)%c;
------解决思路----------------------
(a*b)%c=(a%c*b%c)%c;
n<=1000000: 100万个a排在一起,醉了
------解决思路----------------------
这玩应不是这么算的 暴力能解决还叫编程比赛么 肯定有玄机
善用百度啊少年http://blog.csdn.net/fool_ran/article/details/41127633