正文

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

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

分享到:

习题 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");}  

阅读(5089) | 评论(0)


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

评论

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