求助!c语言#10WA(┳Д┳)!
查看原帖
求助!c语言#10WA(┳Д┳)!
1303760
0523jayeup楼主2024/3/25 00:10
#include<stdio.h>

int main()
{
	int n,i,j;
	scanf("%d",&n);
	int count=-1;
	int in=n;
	for(i=1;in>=0;i++){//找出n对应的个数 
		in-=i;
		count++;
	}
	//对应个数时的大小
	int arr[5000]={0};
	long long int SUM=0;
	for(i=1;i<5001;i++){
		SUM+=i;
		arr[i-1]=SUM;
	}
	//输出n对应的元素 
	int k=n-arr[count-1];
	long long int brr[5000];
	for(i=2,j=0;j<count-1;i++,j++){
		brr[j]=i;
	}
	//从最后一个逐步往前每个元素加1 
	for(i=1,j=count-2;k>=0;j--,k--){
		brr[j]+=1;
		if(j==0)j=count-1;
	}
	//特殊情况
	if(n==3||n==4||n==5){ 
		switch(n){
			case 3:printf("1 2\n2");break;
			case 4:printf("1 3\n3");break;
			case 5:printf("2 3\n6");break;
		}
		return 0;
	}
	//高精度求出积 
	int sum[500]={1};
	for(i=0;i<count-1;i++){
		for(j=0;j<500;j++){
		sum[j]*=brr[i];
		}
		for(j=0;j<500;j++){
			while(sum[j]>9){
				sum[j+1]+=sum[j]/10;
				sum[j]%=10;
			}
		}	
	}
	//输出答案 
	for(i=0;i<count-1;i++){
		printf("%d",brr[i]);
		if(i!=count-2)printf(" ");
	}
	printf("\n");
	for(j=499;sum[j]==0;j--);
	for(i=j;i>=0;i--){
		printf("%d",sum[i]);
	}
	return 0;
}
2024/3/25 00:10
加载中...