正文

c/c++基礎習題解決(2)--因式分解問題2007-07-27 21:24:00

【评论】 【打印】 【字体: 】 本文链接:http://blog.pfan.cn/jay0518/27964.html

分享到:

习题 12:因子分解★

输入n(1 <= n <= 1e9),有多组测试数据:
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");
}

 

阅读(5047) | 评论(0)


版权声明:编程爱好者网站为此博客服务提供商,如本文牵涉到版权问题,编程爱好者网站不承担相关责任,如有版权问题请直接与本文作者联系解决。谢谢!

评论

暂无评论
您需要登录后才能评论,请 登录 或者 注册