习题 12:因子分解★ 输入n(1 <= n <= 1e9),有多组测试数据:61627输出:616 = 2^3 * 7 * 1127 = 3^3(注意输出空格,但行末不要有空格)难度:for beginner --習題來源:飛燕之家c/c++學習論壇 解決代碼: //因式分解 #include <stdio.h>#include <wchar.h>#define PRIME_MAXCOUNT 500#define RESULT_MAXCOUNT 10#define FIRST_NUM 2 //foward declarationint GetAllPrimeNumber(int iNumber,int arry_iPrime[]);void JudgePrimeNumber(int iNumber,int arry_iPrime[],int iPCount,int arry_iResult[]);void ShowResult(int arry_iResult[],int iNum); //main-functionint main(){ int i=0,j=0; int iPrimeNum=0; int iInputNum =0; int arry_iPrimeNumbers[PRIME_MAXCOUNT]; int arry_iResultNumbers[RESULT_MAXCOUNT]; //read data from keyboard while(scanf("%d",&iInputNum)) { if(iInputNum<1) { printf("\n error happen! \n"); break; } //Initlization i=0; j=0; for(;i<PRIME_MAXCOUNT;i++) { arry_iPrimeNumbers[i]=-1; if(i<RESULT_MAXCOUNT) arry_iResultNumbers[i]=-1; } //begin deal with arry_iPrimeNumbers[0]=FIRST_NUM; iPrimeNum=GetAllPrimeNumber(iInputNum-1,arry_iPrimeNumbers); JudgePrimeNumber(iInputNum,arry_iPrimeNumbers,iPrimeNum,arry_iResultNumbers); //show result ShowResult(arry_iResultNumbers,iInputNum); } return 0;} int GetAllPrimeNumber(int iNumber,int arry_iPrime[]){ int iTemptNum =3; int iPrimeCount=1; int iCount =0; int iAccNum =iNumber; int i=0; int flag=0; for(;iTemptNum<iAccNum;iTemptNum++) { while(iCount<iPrimeCount) { if(iTemptNum%arry_iPrime[iCount]!=0) iCount++; else { flag=1; break; } }//end-while if(flag==0) { arry_iPrime[iPrimeCount]=iTemptNum; iPrimeCount++; } flag=0; iCount=0; }//end-for return iPrimeCount;}void JudgePrimeNumber(int iNumber,int arry_iPrime[],int iPCount,int arry_iResult[])/*,int *pFlag)*/{ int i=0,j=0; int iAccNum=iNumber; while((i<iPCount)&&(iAccNum!=1)) { if((iAccNum%arry_iPrime[i])!=0) { i++; } else { iAccNum/=arry_iPrime[i]; arry_iResult[j++]=arry_iPrime[i]; } }} void ShowResult(int arry_iResult[],int iNum){ int i=0,iflag=0; printf("%d=",iNum); for(;i<RESULT_MAXCOUNT;i++) { if(arry_iResult[i]!=-1) { iflag=1; if(arry_iResult[i+1]!=-1) printf("%d*",arry_iResult[i]); else printf("%d",arry_iResult[i]); } } if(iflag==0) { printf("1*%d\n",iNum); } else printf("\n");}

评论