输入一个正整数n,返回一个最小正整数m(m至少是2位数),
使得m的各位乘积等于n,例如输入36,输出49,输入100,输出455,
对于某个n不存在这样的m,请返回-1。
int main()
{
int n;
printf("请输入n\n");
scanf("%d",&n);
int i=2;//循环计数
int x=0;//1-9计数
int bur[25]={0}; //因式分解1-9个数
int burr[25]={0}; //排列组合最小数的组合
int m=0; //输出值
int flag=0; //不满足m=-1的情况
if(n<10)
{
m=10+n;
}
else
{
for(i;i<=n;i++)
{
if(i>9){break;}
while(n%i==0)
{
n/=i;
bur[i]=i;
x++;
flag=1;
}
bur[i]=x;
x=0;
}
if((flag==1) && (n==1))
{
bur[8]=bur[8]+bur[2]/3;
bur[9]+=bur[3]/2;
bur[2]=bur[2]-(bur[2]/3)*3;
bur[3]=bur[3]-(bur[3]/2)*2;
if(bur[3]%2==1)
{
if(bur[2]%3!=0)
{
bur[6]+=1;
bur[2]-=1;
bur[3]-=1;
}
}
else
{
if(bur[2]==2)
{
bur[2]-=2;
bur[4]+=1;
}
}
int ii=0; //burr的计数位
for(i=0;i<10;i++)
{
while(bur[i]!=0)
{
burr[ii]=i;
ii++;
bur[i]-=1;
}
}
for(i=0;i<ii;i++)
{
m=m*10+burr[i];
}
}
else m=-1;
}
printf ("m=%d\n",m);
return 0;
}
输入一个正整数n,返回一个最小正整数m(m至少是2位数),使得m的各位乘积等于n,例如输入36,输出49,输入100,输出455,对于某个n不存在这样的m,请返回-1。
最新推荐文章于 2023-02-02 23:07:53 发布