题意:给出几个数,将这几个数组合成两个不为0的数,使这两个数的乘积最小,并且输出这个乘积。
题解:找到这几个数中不为0的最小的那个数,剩下的数组合成另外一个尽量小的数,在进行乘法运算的时候使用高精度的乘法。
代码如下:
#include<iostream>
#include<cmath>
#include<algorithm>
#include<vector>
#include<string>
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;
}