0
点赞
收藏
分享

微信扫一扫

最大乘积——贪心高精度

_刘彦辉 2022-03-12 阅读 54
c++算法

P1249 最大乘积 - 洛谷 | 计算机科学教育新生态 (luogu.com.cn)

来自洛谷上的题解

 

 特殊情况:如果sum恰好是n+1,则把2去掉将最后一个数加一。

#include<iostream>
#include<vector>
using namespace std;
typedef long long ll;
const int N=10010;
int a[N];
vector<int> mul(vector<int>a,int b)
{
	int t=0;
	vector<int>c;
	for(int i=0;i<a.size();i++)
	{
		t=t+a[i]*b;
		c.push_back(t%10);
		t/=10;
	}
	while(t)
	{
		c.push_back(t%10);
		t/=10;
	}
	return c;
}
int main()
{
	int n;
	cin>>n;
	vector<int>res;
	res.push_back(1);
	ll sum=0,t=0;
	for(int i=2;sum<=n;i++)
	{
		sum+=i;
		a[t++]=i;
	}
	if(sum==n+1)
	{
		a[t-1]++;
		for(int i=1;i<t;i++)
		{
			cout<<a[i]<<" ";
			res=mul(res,a[i]);
		}
		puts("");
		for(int i=res.size()-1;i>=0;i--)
		cout<<res[i];
		return 0;
	}
	else
	{
		for(int i=0;i<t;i++)
		{
			if(a[i]!=sum-n)
			{
				cout<<a[i]<<" ";
				res=mul(res,a[i]);
			}
		}
		puts("");
		for(int i=res.size()-1;i>=0;i--)
		cout<<res[i];
		return 0;
	}
}
举报

相关推荐

0 条评论