The Crime-solving Plan of Groundhog(高精度乘法)

The Crime-solving Plan of Groundhog(高精度乘法)_第1张图片
The Crime-solving Plan of Groundhog(高精度乘法)_第2张图片

The Crime-solving Plan of Groundhog(高精度乘法)_第3张图片
题意:给出几个数,将这几个数组合成两个不为0的数,使这两个数的乘积最小,并且输出这个乘积。
题解:找到这几个数中不为0的最小的那个数,剩下的数组合成另外一个尽量小的数,在进行乘法运算的时候使用高精度的乘法。
代码如下:

#include
#include
#include
#include
#include
using namespace std;
const int N=1e5+7;
int a[N];
vector<int> mul(vector<int> &A,int b)
{
	vector<int> C;
	int t=0;
	for(int i=0;i<A.size()||t;i++)
	{
		if(i<A.size()) t+=A[i]*b;
		C.push_back(t%10);
		t /=10;
	}
	while(C.size()>1&&C.back()==0) C.pop_back();
	return C;
}
int main( )
{
	int t;
	cin>>t;
	while(t--)
	{
		int n;
		cin>>n;
		string s;
		vector<int> A;
		for(int i=0;i<n;i++)
		cin>>a[i];
		sort(a,a+n);
		int pos=0;
		for(int i=0;i<n;i++)
		{
			if(a[i]==0)
			pos++;
		}
		int b=a[pos];
		swap(a[pos],a[0]);
		swap(a[pos+1],a[1]);
		for(int i=n-1;i>=1;i--)
		A.push_back(a[i]);
		auto C=mul(A,b);
		for(int i=C.size()-1;i>=0;i--)
		cout<<C[i];cout<<endl;
	}
	return 0;
}

你可能感兴趣的:(算法题)