import java.math.BigInteger;
import java.util.Arrays;
import java.util.Scanner;
public class P1249 {
public static void main(String[] args) {
// TODO Auto-generated method stub
Scanner in=new Scanner(System.in);
int n=in.nextInt();
int a[]=new int[100000];
int sum=0;
int count=0;
BigInteger sum1 =new BigInteger("1");
BigInteger sum0 =new BigInteger("0");
for(int i=2;;i++)
{
sum=sum+i;
a[count]=i;
count++;
if(sum>n)
{
break;
}
}
int re=sum-n;
if(re==1)
{
a[0]=0;
a[count-1]++;
}
else if(re!=1)
{
a[re-2]=0;
}
Arrays.sort(a);
for(int i=0;i<a.length;i++)
{
if(a[i]!=0)
{
System.out.print(a[i]+" ");
sum0=BigInteger.valueOf(a[i]);
sum1=sum1.multiply(sum0);
}
}
System.out.println("");
System.out.print(sum1);
}
}
写的有点乱,大致思路就是:
1.先从2开始加,一直加到刚刚超出n为止
2.然后判断如果超出的数(re)是1这种情况,那么就把2给去掉,并将最大的数(也就是最后的)+1
3.如果超出的数不为1,那就把这个数给去掉,比如超出了5,那就将5给去了
4.我也不知道为啥要这样去,也是看了别人的题解,应该看得懂代码吧,语法都很基础。
第一次写题解,芜湖!