最后一测试点re求助
  • 板块P1249 最大乘积
  • 楼主lhnnnn
  • 当前回复2
  • 已保存回复2
  • 发布时间2023/4/19 18:17
  • 上次更新2023/10/23 18:02:55
查看原帖
最后一测试点re求助
784425
lhnnnn楼主2023/4/19 18:17

最后一个测试点一直是re,不知道什么原因

#include<iostream>
#include<vector>
#include<string>
#include<cstring>
using namespace std;
void mul(string s1,string &ans){
		int A[10500],B[10500],c[10060];
		memset(c,0,sizeof c);
		memset(A,0,sizeof A);
		memset(B,0,sizeof B);
		for(int i=0;i<s1.length();i++){
			A[s1.length()-i]=s1[i]-'0';
		}
		for(int i=0;i<ans.length();i++){
			B[ans.length()-i]=ans[i]-'0';
		}
		int la=s1.length(),lb=ans.length();
		int lc=lb+la;
		for(int i=1;i<=la;i++){
			for(int j=1;j<=lb;j++){
				c[i+j-1]+=A[i]*B[j];
				c[i+j]+=c[i+j-1]/10;
				c[i+j-1]%=10;
			}
		}
		
		ans.clear();
		if(c[lc]) ans+='0'+c[lc];
		for(int i=lc-1;i>=1;i--){
			ans+='0'+c[i];
		}
}
int main(){
	vector<int> num;
	vector<int> s;
	long long a,sum=0;
	cin>>a;

	for(int i=2;i<=a;i++){
		if(i>=a){
			break;
		}
		num.push_back(i);
		a-=i; 
	}
	
	if(a>0){
		for(int j=a;j>0;j--){
			int c=num.back()+1;
			s.push_back(c);
			num.pop_back();
		}	
	}
	
	while(!num.empty()){
			int c=num.back();
			num.pop_back();
			s.push_back(c);
	}
	string ans;
	ans+='1';
	while(!s.empty()){
		cout<<s.back()<<" ";
		string s1;
		s1=to_string(s.back());
		mul(s1,ans);
		s.pop_back();
	}
	putchar('\n');
	cout<<ans;
	return 0;
}
2023/4/19 18:17
加载中...