RT,代码如下
#include <iostream>
#include <cstdio>
using namespace std;
const int N=45;
int n,k;
string num[N][N],f[N][N];
char s[N];
int a1[N] , b1[N] , c[N] ;
string multiply (string a,string b) {
int lena = a.size() ;
int lenb = b.size() ;
for ( int i = 0 ; i < lena ; i ++ ) {
a1[i+1] = a[lena-i-1] - '0' ;
}
// for ( int i = 1 ; i <= lena ; i ++ ) {
// cout << a1[i] ;
// }
for ( int i = 0 ; i < lenb ; i ++ ) {
b1[i+1] = b[lenb-i-1] - '0' ;
}
// for ( int i = 1 ; i <= lenb ; i ++ ) {
// cout << b1[i] ;
// }
int lenc = lena + lenb ;
int z = 0 ;
for ( int i = 1 ; i <= lena ; i ++ ) {
for ( int j = 1 ; j <= lenb ; j ++ ) {
c[i+j-1] += a1[i] * b1[j] ;
}
}
for ( int i = 1 ; i <= lenc ; i ++ ) {
c[i+1]+=c[i]/10 ;
c[i]%=10;
}
int j = lenc ;
while(j>1&&c[j]==0) {
j-- ;
}
string res ;
for ( int i = j ; i > 0 ; i -- ) {
res+=c[i];
}
return res ;
}
int main()
{
// freopen("multiply.in","r",stdin) ;
// freopen("multiply.out","w",stdout) ;
cin>>n>>k>>(s+1);
for(int i=1;i<=n;i++)
for(int j=i;j<=n;j++)
num[i][j]=num[i][j-1]+s[j];
for(int i=1;i<=n;i++)
{
f[i][0]=num[1][i];
for(int j=1;j<=k;j++)
for(int m=j;m<=i-1;m++)
f[i][j]=strcmp(f[i][j],multiply(f[m][j-1],num[m+1][i]));
}
cout << f[n][k] ;
// string a = "12" , b = "16" ;
// multiply(a,b) ;
system("pause") ;
// return 0 ;
}