30pts #4-#10WA求助
查看原帖
30pts #4-#10WA求助
764239
ABCgfed楼主2023/6/29 10:24

rt

#include<iostream>
using namespace std;
string lastnum(string s,int k){
	if(s.length()<=k){
		while(1){
			if(s.length()<k){
				s="0"+s;
			}
			else{
				break;
			}
		}
		return s;
	}
	string res="";
	for(int i=s.length()-1;i>s.length()-1-k;i--){
		res=s[i]+res;
	}
	return res;
}
string times(string a,string b){
	string c="";
	if(a.length()<b.length()){
		string t=a;
		a=b;
		b=t;
	}
	int x[400]={0};
	int alen=a.length();
	int blen=b.length();
	for(int i=a.length()-1;i>=0;i--){
		for(int j=b.length()-1;j>=0;j--){
			x[(alen-i)+(blen-j)-1]+=((a[i]-'0')*(b[j]-'0'))%10;
			x[(alen-i)+(blen-j)]+=((a[i]-'0')*(b[j]-'0'))/10;
		}
	}
	for(int i=1;i<alen+blen+1;i++){
		if(x[i]>9){
			x[i+1]+=x[i]/10;
			x[i]=x[i]%10;
		}
	}
	int j=0;
	for(int i=alen+blen+2;i>0;i--){
		if(x[i]!=0){
			j=1;
		}
		if(j==1||i==1){
			char num=x[i]+'0';
			c=c+num;
		}
	}
	return c;
}
int main(){
	int k,x[13],ans=1;
	string n;
	while(1){
		if(n.length()<k){
			n="0"+n;
		}
		else{
			break;
		}
	}
	cin>>n>>k;
	int c=0;
	string m,y=lastnum(n,1);
	while(1){
		c++;
		string s=lastnum(n,c);
		m=s;
		for(int i=0;i<10;i++){
			x[i]=0;
		}
		int t=0;
		while(1){
			t++;
			m=times(m,y);
			m=lastnum(m,c);
			if(x[m[0]-'0']>0){
				ans*=t-x[m[0]-'0'];
				string z;
				if(c==1){
					y="1";
					z=lastnum(n,c);
				}
				else{
					z="1";
				}
				for(int i=0;i<t-x[m[0]-'0'];i++){
					y=times(y,z);
					y=lastnum(y,c+2);
					if(c!=1&&i==0){
						z=lastnum(y,c+2);
					}
				}
				break;
			}
			x[m[0]-'0']+=t;
		}
		if(c==k){
			break;
		}
	}
	if(lastnum(times(n,y),c)!=lastnum(n,c)){
		cout<<-1;
		return 0;
	}
	cout<<ans;
	return 0;
}
2023/6/29 10:24
加载中...