[大整数乘法]2020牛客多校 第九场 I.The Crime-solving Plan of Groundhog

题目

[大整数乘法]2020牛客多校 第九场 I.The Crime-solving Plan of Groundhog_第1张图片

思路

每次选出除0外最小的乘即可

代码

#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#include
#if __cplusplus >= 201103L
#include 
#include 
#endif
#define int long long
using namespace std;
const int INF = 0x3f3f3f3f;
int a[100010],res[100010];
int cnt=0,n,cnt1=0;
void product(int k){
	int m=a[k];
	for(int i=n;i>=1;i--){
		if(i==k) continue;
		cnt++;
		res[cnt]+=m*a[i];
	//	cout<
		int k1=cnt;
		while(res[k1]>=10){
			res[k1+1]+=res[k1]/10;
			res[k1]%=10;
			k1++;
			cnt1=max(cnt1,k1);
		}
		cnt1=max(cnt,cnt1);
	}
}
signed main(){
	ios::sync_with_stdio(false);cin.tie(0);cout.tie(0);
	int t;
	cin>>t;
	while(t--){
		cin>>n;
		for(int i=1;i<=n;i++){
			cin>>a[i];
		}
		sort(a+1,a+1+n);
		int k=-1;
		for(int i=1;i<=n;i++){
			if(a[i]!=0){
				k=i;
				break;
			}
		}
		if(k==n||k==-1){
			cout<<"0"<<endl;
			continue;
		}
		if(k!=1) swap(a[k+1],a[1]);
		cnt=0,cnt1=0;
		product(k);
		for(int i=cnt1;i>=1;i--) cout<<res[i];
		cout<<endl;
		for(int i=1;i<=cnt1;i++) res[i]=0;
	} 
    return 0;
}

你可能感兴趣的:([大整数乘法]2020牛客多校 第九场 I.The Crime-solving Plan of Groundhog)