C_1:整数分解

 //整数分解 一个正整数可以分解成若干个自然数之和。
//请你编一个程序,对于给出的一个正整数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_SIZE 1001
void pow_3(int a[],int x)
{
    
int temp,t,m;
    
int i=1,j,n;
    
while(i<=x){
        m
=a[1];
        
        
for(n=0,t=0,j=1;n<=a[0];j++,n++){
            temp
=3*a[j];
            a[j]
=temp%10+t;//进位后的数
            t=temp/10;//向高位进位
            if(a[j]>=10){
                t
+=(a[j]/10);
                a[j]
=a[j]%10;
            }
//进位后的数大于10,则累加到t
        }
//对数a[]完成一次*3

        
if(a[a[0]+1]!=0)//计算新数的位数
            if(a[a[0]+2]!=0)
                a[
0]+=2;
            
else
                a[
0]++;
        i
++;
    }
//循环x次
    
}

        
int main()
{
    
int a[MAX_SIZE]={1,1};
    
    
int n,m=1;
    
int i=0,j=0,t;
    scanf(
"%d",&n);
    
if(n==1){
        printf(
"%d",m);
        
return 0;
    }

    i
=n/3;
    
switch(n%3){
        
case 0:break;
        
case 1:{i--;a[1]=4;break;}
        
case 2:{j++;a[1]=2;break;}
    }

    pow_3(a,i);
    
for(t=a[0];t>=1;t--)
    printf(
"%d",a[t]);
    printf(
" ");
    
return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值