【洛谷OJ】【JAVA】P1018 乘積最大
阿新 • • 發佈:2018-12-09
import java.math.BigInteger; import java.util.Scanner; public class Main { private static Scanner cin; private static char[] values; private static BigInteger max = new BigInteger("1"); private static int n; private static int k; public static void main(String args[]) throws Exception { cin = new Scanner(System.in); n = cin.nextInt(); k = cin.nextInt(); String nvalue = cin.next(); values = nvalue.toCharArray(); calc(0,n-k,max,1); System.out.println(max); } /** * 基於values陣列,從startposition位置開始,有length個數字可以用來分割拼接成數字,當前處理到k+1個數字的第count個,tmpValue是之前count-1個數字的乘積 * @param startPosition * @param length * @param tmpValue * @param count */ public static void calc(int startPosition, int length, BigInteger tmpValue, int count) { String tmp = null; //如果是最後一個數,使用剩餘的數字組成一個數字 if(count == k+1) { tmp =String.valueOf(values,startPosition,values.length-startPosition); BigInteger value = new BigInteger(tmp); BigInteger tValue = tmpValue.multiply(value); if(tValue.compareTo(max)>0) { max = tValue; } }else { for(int j=1;j<=length;j++) { tmp = String.valueOf(values,startPosition,j); BigInteger value = new BigInteger(tmp); BigInteger tValue = tmpValue.multiply(value); calc(startPosition+j,n-startPosition-j-(k-count),tValue,count+1); } } } }