正经题解
2025-09-13 21:24:14
发布于:浙江
2阅读
0回复
0点赞
#include<bits/stdc++.h>
using namespace std;
string s;
int k;
void dv(string &a,int d,int &r){
string q; q.reserve(a.size());
long long c=0;
for(char ch:a){
c=c*10+(ch-'0');
int t=c/d;
if(!q.empty()||t) q.push_back('0'+t);
c%=d;
}
if(q.empty()) q="0";
a=q; r=(int)c;
}
int vp(string t,int p){
int c=0;
while(1){int r; dv(t,p,r); if(r==0) c++; else break;}
return c;
}
vector<int> md(const string &a,int p){
string t=a; vector<int> v(k,0);
for(int i=0;i<k;i++){int r; dv(t,p,r); v[i]=r;}
return v;
}
vector<int> ml(const vector<int>&a,const vector<int>&b,int p){
vector<int> c(k,0); long long cr=0;
for(int i=0;i<k;i++){
long long s=cr;
for(int j=0;j<=i;j++) s+=1LL*a[j]*b[i-j];
c[i]=s%p; cr=s/p;
}
return c;
}
bool eq(const vector<int>&x){
if(x[0]!=1) return false;
for(int i=1;i<k;i++) if(x[i]) return false;
return true;
}
vector<int> pw(vector<int> x,int p,int u,int v){
for(int i=0;i<u;i++) x=ml(x,x,p);
for(int i=0;i<v;i++){
auto t=ml(x,x,p);
auto t2=ml(t,t,p);
x=ml(t2,x,p);
}
return x;
}
int o2(){
if(k==1) return 0;
auto r=md(s,2);
int u=(k==2)?1:(k-2);
while(u>0&&eq(pw(r,2,u-1,0))) u--;
return u;
}
pair<int,int> o5(){
auto r=md(s,5);
int u=2,v=k-1;
while(u>0&&eq(pw(r,5,u-1,v))) u--;
while(v>0&&eq(pw(r,5,u,v-1))) v--;
return {u,v};
}
void ms(string &a,int m){
int c=0;
for(int i=(int)a.size()-1;i>=0;i--){
int x=(a[i]-'0')*m+c;
a[i]=char('0'+x%10); c=x/10;
}
while(c){ a.insert(a.begin(),char('0'+c%10)); c/=10; }
}
int main(){
cin>>s>>k;
int a=vp(s,2), b=vp(s,5);
if((a>0&&a<k)||(b>0&&b<k)){ cout<<-1; return 0; }
int e2=0,e2b=0,e5=0;
if(a==0) e2=o2();
if(b==0){ auto t=o5(); e2b=t.first; e5=t.second; }
int E2=max(e2,e2b);
string ans="1";
for(int i=0;i<E2;i++) ms(ans,2);
for(int i=0;i<e5;i++) ms(ans,5);
cout<<ans;
return 0;
}
全部评论 1
d
1周前 来自 浙江
0
有帮助,赞一个