输入一个正整数N,要求满足题目条件
题目的要求是输入一个正整数N,范围在0~100000000(1亿)之间,系统再将N转换成另一个正整数Q,并输出Q的数值而Q的数值的满足条件为:Q每一位的数值上的数字连乘结果要等于N本身,且Q要取满足该条件的最小正整数!
例如我输入N为10,则系统会生成52,25两个数字
最后输出Q为较小的正整数25!
现在贴出我所实现的代码:
程序代码:#include<stdio.h>
void main()
{
int n,bmp;
int a[30],i,j,k,t=1;
int num=0,num2=0,num3=0,num5=0,num7=0;
for (;;i++)
{
num=0;num2=0;num3=0;num5=0;num7=0;
begin:
scanf("%d",&n);
if ( n>1000000000 || n<=0 )
{
printf("ERROR!ÖØÐÂÊäÈë!\n");
goto begin;
}
else if (n>0&&n<10)
{
printf("QµÄÊýֵΪ1%d!\n\n",n);
goto exit;
}
else if (n>=10)
{
for (;;i++)
{
if ( n%2==0 && n!=2 )
{num2+=1;n/=2;
}
else if ( n%3==0 && n!=3 )
{num3+=1;n/=3;
}
else if ( n%5==0 && n!=5 )
{num5+=1;n/=5;
}
else if ( n%7==0 && n!=7 )
{num7+=1;n/=7;
}
if (n==2)
{num2+=1;break;
}
if (n==3)
{num3+=1;break;
}
if (n==5)
{num5+=1;break;
}
if (n==7)
{num7+=1;break;
}
if ( n%2!=0 &&
n%3!=0 &&
n%5!=0 &&
n%7!=0 )
{printf("ÎÞ½â!");goto exit;
}
}
}
for (i=0;i<30;i++) a[i]=1;
for (i=0;i<(num+num2);i++) a[i]=2;
num+=num2;
for (i=num;i<(num+num3);i++) a[i]=3;
num+=num3;
for (i=num;i<(num+num5);i++) a[i]=5;
num+=num5;
for (i=num;i<(num+num7);i++) a[i]=7;
for (k=0;k<30;k++)
{
if ((a[k]*a[k+1])<10)
{
a[k+1]=a[k+1]*a[k];
a[k]=1;
t++;
}
if ( (a[k]*a[k+1])>=10 && t>0 )
{
for (i=0;i<29;i++)
{
for (j=0;j<29-i;j++)
{
if (a[j]>a[j+1])
{
bmp=a[j];
a[j]=a[j+1];
a[j+1]=bmp;
}
else
continue;
}
}
}
}
// for (i=0;i<30;i++) printf("%2d",a[i]);
// printf("\n\n");
printf("QµÄÊýֵΪ");
for (i=0;i<30;i++)
{
if (a[i]==1) continue;
printf("%d",a[i]);
}
printf("!\n\n");
}
exit:
printf("\n");
}基本的N数值都可以正常输出,但是还有一些比较纠结的问题
像我输入100000000与1000000000等数值就会产生错误的数值Q
换句话说,我代码中的冒泡排序出了点错误
麻烦高手解惑!










新手路过.....好长好长...
