- 问答
- 2018-05-18 17:30:21 @
不会的在这里发,三个管理员随时回答。
4 条评论
-
18017894 LV 5 @ 2018-11-06 20:02:23
在下的源代码:
有没有更优方法??
```cpp
#include<iostream>
#include<string>
#include<cstring>
#include<cstdlib>
using namespace std;
string s;
int k;
int a[101],b[101],w[101]= {0};
int gw[10]= {1,1,4,4,2,1,1,4,4,2};
int cheng[101]= {0},bei[101]= {0};
void init() {
int i;
cin>>s>>k;
int n=s.length();
w[0]=gw[s[s.length()-1]-'0'];
for(i=0; i<n; i++)
a[n-i-1]=s[i]-'0';
}
void multi(int a[],int b[]) {
int i,j;
int c[101];
memset(c,0,sizeof(c));
for(i=0; i<100; i++)
for(j=0; j<100; j++)
if(i+j<100) {
c[i+j]+=a[i]*b[j];
c[i+j+1]+=c[i+j]/10;
c[i+j]=c[i+j]%10;
}
for(i=0; i<100; i++) {
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
memcpy(b,c,sizeof(c));
}
int bj(int a[],int b[],int n) {
int i;
for(i=0; i<=n; i++)
if(a[i]!=b[i])
return 0;
return 1;
}void solve() {
int i,j;
int temp[101]= {0};
bei[0]=1;
for(i=0; i<w[0]; i++) {
multi(a,bei);
}
for(i=1; i<k; i++) {
memcpy(cheng,a,sizeof(a));
memset(temp,0,sizeof(temp));
temp[0]=1;
for(j=1; j<=10; j++) {
multi(bei,cheng);
multi(bei,temp);
if(bj(cheng,a,i)==1) {
w[i]=j;
memcpy(bei,temp,sizeof(temp));
break;
}
}
if(w[i]==0) {
cout<<-1<<endl;
exit(0);
}}
}
void dmulti(int a[],int b) {
int i;
int c[101];
memset(c,0,sizeof(c));
for(i=0; i<100; i++) {
c[i]+=a[i]*b;
c[i+1]+=c[i]/10;
c[i]=c[i]%10;
}
memcpy(a,c,sizeof(c));
}
void print() {
int i,j;
int ans[101]= {0};
ans[0]=1;
for(i=0; i<k; i++)
dmulti(ans,w[i]);
i=100;
while((ans[i]==0)&&(i>0))i--;
for(j=i; j>=0; j--) cout<<ans[j];
}
int main() {
init();
solve();
print();
return 0;
}
``` -
2018-10-17 19:43:51@
今天,10月17日,此日题解。
-
2018-06-06 13:49:15@
警告张逸宸:随便发言!
-
2018-05-19 10:41:56@
但不能给代码,只能说思路,如果实在不会才能发代码
- 1