import java.math.BigInteger;
import java.util.Scanner;
public class Main {
public static void main(String[] args) {
// TODO 自动生成的方法存根
Scanner sc=new Scanner(System.in);
int n=sc.nextInt();
int k=n,index = 0;//还剩下几没有被分走
//用空间换时间
int used[]=new int[10010];
//从2开始分解,因为从1开始分解的话,会浪费一个因子去相乘
//index是记录下标的
for(int i=2;i<=n;i++) {
k-=i;
used[i]=1;
if(k<0) {
//分解到k<0的时候,要还原回去,因为并没有使用到
index=i;
used[i]=0;
k+=i;
break;
}
}
//分走还没有被加完的k
if(k>index-2) {//如果k>现有因子个数
//下标为2的就弃用
used[2]=0;
used[2+k]=1;
index=2+k;
}else {//如果k<=现有因子个数
used[index]=1;
used[index-k]=0;
}
//因为相乘的数值会很大很大超过long,所以用高精度的BigInteger
BigInteger sum=new BigInteger("1");
for(int i=2;i<=index;i++) {
if(used[i]==1) {
System.out.print(i+" ");
sum=sum.multiply(BigInteger.valueOf(i));
}
}
System.out.println();
System.out.println(sum);
}
}
P1249 最大乘积 java
最新推荐文章于 2025-05-21 17:06:37 发布