输入一个正整数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
换句话说,我代码中的冒泡排序出了点错误
麻烦高手解惑!