下面的代码是用来验证一个算法的,就是输入一个N位十进制数,将它分成M段,那么就有M个数,程序就是为了求出乘积的最大直。请高手们指导一下。。。。。不胜感激!!!!!!!!!!!!!
#include<stdio.h>
#include<iostream>
using namespace std;
const int _max=6;
int main()
{ int intn[_max],n,k,l,temp,t=0; //intn[_max]用来存放各位数
int mul_k(int n,int m,int *p);
char ch;
do
{
cout<<"请输入数据"<<endl;
cin>>n>>k>>l;
do{
intn[t++]=n%10;
n=n/10;
}while(n);
for(int i=0;i<t;i++)
cout<<intn[i]<<" ";
cout<<endl;
for( temp=0,i=0;i<=(t-1)/2;i++)
{ temp=intn[i];
intn[i]=intn[t-1-i];
intn[t-1-i]=temp;
}
cout<<mul_k(k,l,intn);
getchar();
}while((ch=getchar())=='q'||ch=='Q');
return 0;
}
int mul_k(int n,int m,int *p)
{
int s,max,*st;
int a[_max][_max]; //a[i][j]就是前i个数的j段乘积的最大直
int count(int i,int m,int *b); //从第i位起m个数组成的十进制数
st=p;
for(int i=1;i<=n;i++)
a[i][1]=count(0,i,p); //只分一段时
for(i=2;i<=n;i++)
for(int j=2;j<=i&&(!(i==n&&j==m));i++)
{
max=a[j-1][j-1]*count(j-1,i-j+1,st);
s=j-1;
for(int t=0,k=j;k<i;k++)
if((t=a[k][j-1]*count(k,k-j+1,st))>max)
{ max=t;
s=k;
}
}
return a[n][m];
}
int conut(int i,int m,int *b)
{ int sum=0,k=1;
for(int t=i+m-1;t>=i;t--)
{ sum=sum+k*b[t];
k*=10;
}
return sum;
}