习题 12:因子分解★
616
27
输出:
616 = 2^3 * 7 * 11
27 = 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 declaration
int 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-function
int 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");
}
评论