拼数字

题目 拼数字

image-ba4c9799

思路分析

代码实现

#include<bits/stdc++.h>

using namespace std;

#define endl '\n'

// n个数字2 和 m个数字3 拼出最大的2023的倍数

// n=2 m=8

// 2233333333 做全排列 然后转成int 看是不是 2023的倍数 有更大的就更新

// 数据范围过大 尽可能做吧 能拿一点是一点

// 用高精度除法

typedef long long LL;

int n,m;

string s;

vector<int> A;

bool div(vector<int> &A,int b){

	vector<int> C;

	int r=0;

	for(int i=A.size()-1;i>=0;i--){

		r=r*10+A[i];

		C.push_back(r/b);

		r%=b;

	}

	reverse(C.begin(),C.end());

	while(C.size()>1 && C.back()==0)

		C.pop_back();

	return r==0;

}

int main()

{

	ios::sync_with_stdio(0),cin.tie(0),cout.tie(0);

	cin>>n>>m;

	for(int i=0;i<n;i++)	s+='2';

	for(int i=0;i<m;i++)	s+='3';

	string res="-1";

	do{

		for(int i=s.size()-1;i>=0;i--){

			A.push_back(s[i]-'0');

		}

		if(div(A,2023))

			res=s;

	}while(next_permutation(s.begin(),s.end()));

	cout<<res;

	return 0;

}

同类题型

视频讲解


⬅️ 抓娃娃 🏠 00-冲刺国赛 ➡️ 逃跑