/*
整数分解(版本2)
一个正整数可以分解成若干个自然数之和。请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大。
例如n=10,则可以分解为2+2+3+3,乘积m=2*2*3*3=36
输入格式 Input Format
一个正整数n
输出格式 Output Format
输出分解的自然数的最大乘积m
*/
#include <stdio.h>
#define MAX 10001 /*int big_pow_x_y(int x,int y,int big[])
{
int len = 0 ,i,j ;
int xz[MAX]={0},yz[MAX] = {0} ;
return len ;
}
*/ int jinwei(int big[],int len)
{
int k ;
for(k=1;k<= len ; k++)
if ( big[k] >= 10)
{
if ( big[len] >= 10)
len ++ ;
big[k+1] += big[k] / 10 ;
big[k] %= 10 ;
}
return len ;
} int pow_3 (int x,int y ,int big[])
{
int i,j,k,len=1;
big[1] = 1 ;
for(i=1 ; i<= y ; i++)
{
for(j=1;j<= len ; j++)
big[j] *= x ;
len = jinwei(big,len);
}
return len ;
}
{
int k,n,h,last=0;
int big[MAX] = {0},lbig=0;
big[1] = 1 ;
scanf("%d",&n);
if ( n <= 4)
{
printf("%d ",n);
return 0 ;
}
if ( n % 3 == 1)
{
k = n / 3 - 1 ;
last = 4 ;
}
else
if ( n % 3 == 2)
{
k = n / 3 ;
last = 2 ;
}
else
{
k = n/3 ;
}
/*lbig = big_pow_x_y(3,k,big) ;*/
if ( k > 0)
lbig = pow_3(3,k,big) ;
if ( last > 1 )
{
for(h=1 ; h<= lbig ; h++)
big[h] *= last ;
lbig = jinwei(big,lbig);
}
for(h=lbig ; h>= 1 ; h--)
printf("%d",big[h]);
printf(" ");
return 0 ;
}
整数分解(版本2)
一个正整数可以分解成若干个自然数之和。请你编一个程序,对于给出的一个正整数n(1<=n<=1500),求出满足要求的分解方案,并使这些自然数的乘积m达到最大。
例如n=10,则可以分解为2+2+3+3,乘积m=2*2*3*3=36
输入格式 Input Format
一个正整数n
输出格式 Output Format
输出分解的自然数的最大乘积m
*/
#include <stdio.h>
#define MAX 10001 /*int big_pow_x_y(int x,int y,int big[])
{
int len = 0 ,i,j ;
int xz[MAX]={0},yz[MAX] = {0} ;
return len ;
}
*/ int jinwei(int big[],int len)
{
int k ;
for(k=1;k<= len ; k++)
if ( big[k] >= 10)
{
if ( big[len] >= 10)
len ++ ;
big[k+1] += big[k] / 10 ;
big[k] %= 10 ;
}
return len ;
} int pow_3 (int x,int y ,int big[])
{
int i,j,k,len=1;
big[1] = 1 ;
for(i=1 ; i<= y ; i++)
{
for(j=1;j<= len ; j++)
big[j] *= x ;
len = jinwei(big,len);
}
return len ;
}
{
int k,n,h,last=0;
int big[MAX] = {0},lbig=0;
big[1] = 1 ;
scanf("%d",&n);
if ( n <= 4)
{
printf("%d ",n);
return 0 ;
}
if ( n % 3 == 1)
{
k = n / 3 - 1 ;
last = 4 ;
}
else
if ( n % 3 == 2)
{
k = n / 3 ;
last = 2 ;
}
else
{
k = n/3 ;
}
/*lbig = big_pow_x_y(3,k,big) ;*/
if ( k > 0)
lbig = pow_3(3,k,big) ;
if ( last > 1 )
{
for(h=1 ; h<= lbig ; h++)
big[h] *= last ;
lbig = jinwei(big,lbig);
}
for(h=lbig ; h>= 1 ; h--)
printf("%d",big[h]);
printf(" ");
return 0 ;
}