1 3
123
2 6 100
7407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407407340
3 1 0
0
这道题目一直超时,刚开始用的是java写的,刚开始以为是大整数问题,所以就直接利用java.Math里面的BigInteger类来完成,结果超时了 初始代码: import java.util.*;
import java.math.BigInteger;
class Main
{
public static void main(String[] args)
{
int a,n;
Scanner sc = new Scanner(System.in);
char aaa = '0';
System.out.println((int)aaa);
while(sc.hasNextInt())
{
a = sc.nextInt();
n = sc.nextInt();
long t = System.currentTimeMillis();
BigInteger bi = new BigInteger(String.format("%d",a));
BigInteger temp = new BigInteger(String.format("%d",a));
BigInteger biSum = BigInteger.ZERO;
for(int i = 0;i<n;i++)
{
biSum = biSum.add(temp);
temp = temp.multiply(BigInteger.TEN);
temp =temp.add(bi);
}
System.out.println(biSum.toString());
System.out.println(System.currentTimeMillis()-t);
}
}
}
以6 100为例运行时间是17ms 6 100 74074074074074074074074074074074074074074074074074074074074074074074074074074074 07407407407407407340 17 第二种是: import java.util.*;
import java.math.BigInteger;
class Main2
{
public static void main(String[] args)
{
int a,n;
Scanner sc = new Scanner(System.in);
//char aaa = '0';
// System.out.println((int)aaa);
while(sc.hasNextInt())
{
a = sc.nextInt();
n = sc.nextInt();
long t = System.currentTimeMillis();
BigInteger bi = new BigInteger(String.format("%d",a));
BigInteger temp = new BigInteger(String.format("%d",a));
BigInteger biSum = BigInteger.ZERO;
for(int i = 0;i<n;i++)
{
biSum = biSum.add(temp);
temp = temp.multiply(BigInteger.TEN);
temp =temp.add(bi);
}
System.out.println(biSum.toString());
System.out.println(System.currentTimeMillis()-t);
}
}
}
第三种方法:采用技巧,把所有数进行累加,好像把所有数手算的时候把所有的数进行相加! import java.util.Scanner;
class Main3
{
public static void main(String[] args)
{
Scanner sc = new Scanner(System.in);
int[] sum = new int[100000];
int mod = 0;
int i;
int a = sc.nextInt();
int n = sc.nextInt();
long l = System.currentTimeMillis();
if(n==0)
{
System.out.println(0);
return;
}
for(i =0;i<n||(i>=n&&mod!=0);i++)
{
sum[i] = (a*(n-i)+mod)%10;
mod = (a*(n-i)+mod)/10;
}
for(int j =i-1;j>=0;j--)
{
System.out.print(sum[j]);
}
System.out.printf("\n");
System.out.println(System.currentTimeMillis()-l);
}
}
第三种方法应该是最优的了,可是还是超时,怒用C++ #include<stdio.h>
int main()
{
int sum[100010];
int a,n;
scanf("%d%d",&a,&n);
int i,mod;
if(n==0)
{
printf("0\n");
return 0;
}
for(i =0;i<n||(i>=n&&mod!=0);i++)
{
sum[i] = (a*(n-i)+mod)%10;
mod = (a*(n-i)+mod)/10;
}
for(int j =i-1;j>=0;j--)
{
printf("%d",sum[j]);
}
printf("\n");
return 0;
}
好的,通过了,看来PAT没有给java双倍时间啊,无力吐槽 |