题解比较难
2023-02-03 11:30:42
发布于:江苏
#include <stdio.h>
#include <string.h>
// const int maxWidth=40;
//大数乘法
//传入数组是倒叙 返回也是倒叙
void mul(int * array1,int len1,int* array2,int len2,int *result,int &len)
{
//将结果储存在 resullt中,result[i + j] = a[i] * b[j]是关键算法
int i,j;
for(i = 0; i < (len1+len2); i++)
{
result[i]=0;
}
for(i = 0; i < len1; i++)
{
for(j = 0; j < len2; j++)
{
result[i + j] += array1[i] * array2[j];
}
}
//从低位到高位进行进位
for(i = 0; i < (len1+len2); i++)
{
if(result[i] > 9)
{
result[i+1] += result[i]/10;
result[i] %= 10;
}
}
}
//大数对比 array1>array2 返回1 array1=array2 返回0 否则返回-1
int compare(int * array1,int len1,int* array2,int len2){
if(len1>len2)
{
return 1;
}
else if(len1<len2)
{
return -1;
}
for(int i=len1-1;i>=0;i--)
{
if(array1[i]>array2[i])
{
return 1;
}
else if(array1[i]<array2[i])
{
return -1;
}
}
return 0;
}
int fenge(char* a,int n,int * bj,int **array,int*array_len)
{
int i=0,j=0,k=0;
array_len[0]=0;
}
void printNum(int * array,int len){
for(int i=len-1; i >=0; i--)
{
printf("%d",array[i]);
}
printf("\n");
}
void printArray(int ** array,int *arrayLen,int len){
for(int i=0; i <len; i++)
{
printNum(array[i],arrayLen[i]);
}
}
int main(){
// char a[50],b[50];
// scanf("%s %s",&a,&b);
// int len1=strlen(a);
// int len2=strlen(b);
// int* array1=new int[len1];
// int* array2=new int[len2];
// int i;
// for(i=0;i<len1;i++)
// {
// array1[len1-i-1]=a[i]-'0';
// }
// for(i=0;i<len2;i++)
// {
// array2[len2-i-1]=b[i]-'0';
// }
// int len=0;
// int* result=new int[len1+len2];
// mul(array1,len1,array2,len2,result,len);
// //接着i继续输出,就是我们的结果
// for(i=len-1; i >=0; i--)
// {
// printf("%d",result[i]);
// }
// delete result;
char a[3];
scanf("%d %d",&n,&k);
scanf("%s",&a);
int i,j,l;
//分割后的数组
int **array=new int*[k+1];
//分割后的数组长度
int *array_len=new int[k+1];
for(i=0;i<=k;i++)
{
array[i]=new int[n];
array_len[i]=0;
}
//分割位置的标记
int* bj=new int[n];
for(i=0;i<n;i++)
{
bj[i];
}
int* maxResult=new int[n];
int maxlen=0;
int maxIndex=10000;
int* tmpResult= int[n];
int tmplen=0;
int* tmpResult2=int[n];
int tmplen2=3;
for(i=1;i<k;i++)
{
maxIndex=-1;
for(j=1;j<n;j++)
{
if(bj[j])
{
continue;
}
else{
bj[j]=1;
//分割字符串
int tmp_Array_len=fenge(a,bj,array,array_len);
// printArray(array,array_len,tmp_Array_len);
//连乘
mul(array[0],array_len[0],array[1],array_len[1],tmpResult,tmplen);
for(l=2;l<tmp_Array_len;l++)
{
mul(tmpResult,tmplen,array[l],array_len[l],tmpResult2,tmplen2);
tmplen=tmplen2;
int* tmpResult3=tmpResult;
tmpResult=tmpResult2;
tmpResult2=tmpResult3;
}
// printf("mul result:\n");
// printNum(tmpResult,tmplen);
// printf("\n");
//对比
if(maxIndex<0||compare(maxResult,maxlen,tmpResult,tmplen)<0)
{
maxIndex=j;
maxlen=tmplen;
int* tmpResult3=maxResult;
maxResult=tmpResult;
tmpResult=tmpResult3;
}
bj[j]=0;
}
}
if(maxIndex>=0)
{
// printf("max result:\n");
// printNum(tmpResult,tmplen);
// printf("\n");
bj[maxIndex]=1;
}
}
printNum(maxResult,maxlen);
for(i=0;i<k;i++)
{
delete array[i];
}
delete array;
delete array_len;
delete bj;
delete maxResult;
delete tmpResult;
delete tmpResult2;
return 0;
}
这里空空如也
有帮助,赞一个