首页 > 专题系列 > Java解POJ > POJ 2710 Consecutive Digits [解题报告] Java
2013
11-11

POJ 2710 Consecutive Digits [解题报告] Java

Consecutive Digits

问题描述 :

As a recruiting ploy, Google once posted billboards in Harvard Square and in the Silicon Valley area just stating “{first 10-digit prime found in consecutive digits of e}.com”. In other words, find that 10-digit sequence and then connect to the web site — and find out that Google is trying to hire people who can solve a particular kind of problem.

Not to be outdone, Gaggle (a loosy-goosy fuzzy logic search firm), has devised its own recruiting problem. Consider the base 7 expansion of a rational number. For example, the first few digits of the base 7 expansion of 1/510 = 0.12541…7, 33/410 = 11.15151…7, and 6/4910 = 0.06000…7, From this expansion, find the digits in a particular range of positions to the right of the “decimal” point.

输入:

The input file begins with a line containing a single integer specifying the number of problem sets in the file. Each problem set is specified by four base 10 numbers on a single line, n d b e, where n and d are the numerator and denominator of the rational number and 0 <= n <= 5,000 and 1 <= d <= 5,000. b and e are the beginning and ending positions for the desired range of digits, with 0 <= b,e <= 250 and 0 <= (e-b) <= 20. Note that 0 is the position immediately to the right of the decimal point.

输出:

Each problem set will be numbered (beginning at one) and will generate a single line:
    Problem set k: n / d, base 7 digits b through e: result

where k is replaced by the problem set number, result is your computed result, and the other values are the corresponding input values.

样例输入:

4
1 5 0 0
6 49 1 3
33 4 2 7
511 977 122 126

样例输出:

Problem set 1: 1 / 5, base 7 digits 0 through 0: 1
Problem set 2: 6 / 49, base 7 digits 1 through 3: 600
Problem set 3: 33 / 4, base 7 digits 2 through 7: 151515
Problem set 4: 511 / 977, base 7 digits 122 through 126: 12425

解题代码:

//* @author: ccQ.SuperSupper
import java.util.*;
import java.math.*;
public class Main {
 public static void main(String []args) throws Exception{
		
 int t,cs=1,left,right,i,j;
 BigInteger a,b,seven;
 String str1,str2;
		
 seven = BigInteger.valueOf(1);
 for(i=0;i< 10000;++i)
	seven = seven.multiply(BigInteger.valueOf(7));
		
 Scanner cin = new Scanner(System.in);
		
 t = cin.nextInt();
 while(t--!=0){
	str1 = cin.next();
	str2 = cin.next();
	left = cin.nextInt();
	right = cin.nextInt();
	
	a = new BigInteger(str1);
	a = a.multiply(seven);
	a = a.divide(new BigInteger(str2));
			
	b = new BigInteger(str1);
	b = b.divide(new BigInteger(str2));
	b = b.multiply(seven);
	
	a = a.subtract(b);
	a = a.add(seven);
System.out.print("Problem set "+cs+": "+str1+" / "+str2+", base 7 digits "+left+" through "+right+": ");
	System.out.println(a.toString(7).substring(left+1, right+2));
	++cs;
  }
 }
}