四个re,求优化
查看原帖
四个re,求优化
1157709
zengzeyu楼主2024/7/9 09:02
#include<bits/stdc++.h>
#define MAXN 1000
using namespace std;
string to_str(int n[],int len){
	string res = "";
	for(int i = 0;i < len-1;i ++){
		res += char(n[i] + '0');
	}
	if(res[0] == 0){
		res.erase(0,1);
	}
	return res;
}
string add(string a,string b){
	int int_a[MAXN],int_b[MAXN],int_res[MAXN];
	string res;
	memset(int_a,0,sizeof(int_a));
	memset(int_b,0,sizeof(int_b));
	memset(int_res,0,sizeof(int_res));
	int lena = a.length(),lenb = b.length(),len = max(lena,lenb);
	for(int i = 0,j = lena-1;i < lena;i ++,j --){
		int_a[i] = a[j]-'0';
	}
	for(int i = 0,j = lenb-1;i < lenb;i ++,j --){
		int_b[i] = b[j]-'0';
	}
	for(int i = 0;i < len;i ++){
		int_res[i] = int_a[i] + int_b[i];
		
	}
	for(int i = 0;i < len;i ++){
		if(int_res[i] > 9){
			int_res[i+1] += int_res[i]/10;
			int_res[i]%=10;
		}
	}
	for(int i = len;i >= 0;i --){
		res = res+char(int_res[i] + '0');
	}
	if(res[0] == '0'){
		res.erase(0,1);
	}
	return res;
}
string mul(string a,string b){
	string mul_ab = "",pro_p = "0";
	int alen = a.length(),blen = b.length(),carry,pla;
	for(int i = blen-1;i >= 0;i--){
		carry = 0;
		mul_ab = "";
		int vb = b[i]-'0';
		for(int j = alen-1;j >= 0;j--){
			int va = a[j]-'0';
			int mab = va * vb + carry;
			pla = mab % 10;
			
   			mul_ab =  to_string(pla) + mul_ab;
   			carry = (mab -pla) / 10 ;
			//carry = 0;
		}
		if(carry != 0){
			mul_ab = to_string(carry) + mul_ab;
		}    
		for(int j = 1;j < blen - i;j++){
			mul_ab = mul_ab + "0";
		}
		
		pro_p = add(pro_p, mul_ab);
		   
		mul_ab = "";	
	}
	return pro_p;
}
string list_mul(int n[],int len){
	string res = "1";
	for(int i = 0;i < len;i ++){
		res = mul(res,to_string(n[i]));
	}
	return res;
}
int main(){
	
	int num[50],n,sum,dif,i;
	scanf("%d",&n);
	memset(num,0,sizeof(num));
	for(i = 2;sum < n;i ++){
		num[i-2] = i;
		sum += i;
	}
	int len = i - 2;
	dif = sum - n;
	if(dif >= 2){
		num[dif-2] = 1;
	}
	if(dif == 1){
		num[len-1]++;
		num[0]--;
	}
	for(int k = 0;k < len;k ++){
		if(num[k] == 1){
			continue;
		}
		if(k == len-1){
			
			printf("%d\n",num[k]);
			break;
		}
		printf("%d ",num[k]);
	}
	cout<<list_mul(num,len);
	return 0;
	
}
2024/7/9 09:02
加载中...