已解决
[此贴子已经被作者于2006-4-11 12:51:17编辑过]
已解决
[此贴子已经被作者于2006-4-11 12:51:17编辑过]
 2006-02-08 14:26
	    2006-02-08 14:26
   2006-02-08 14:45
	    2006-02-08 14:45
   2006-02-08 20:28
	    2006-02-08 20:28
  #include <stdio.h>
#include <conio.h>
int q(int i,int t)                            /*i^t 的计算*/
{
    int s;
    s=1;
    for ( ;t;t--)
       s=s*i;
    return s;
}
main()
{
  int N,a,i,t,n,m;
  scanf("%d",&N);                            /*N为组数*/
  for ( ;N;N--)
   {
     scanf("%d",&a);                         /*a为要分解的数*/
     printf("%d=",a);
     n=a;
     m=1;
   
     for (i=2;i<=a;i++)
      {
       while(a!=i)                           /*计算这个数包含因子i的个数t*/
       {
         t=0;
         while (a%i==0)                      
          {
           t++;
           a=a/i;
          }
         if (t==1)
          {                                  /*i的个数为1,不带括号*/
           printf("%d*",i);
           m*=i;
          }
         else if (t>1) 
          {
            if (q(i,t)==n)                   
              printf("%d^%d\n",i,t);         /*i^t等于要分解的数,不带括号*/
            else
              {
               m*=q(i,t);
               if(m==n)                      
                 printf("(%d^%d)\n",i,t);    /*如果q(i,t)是最后一个因子,不带“*”*/
               else
                 printf("(%d^%d)*",i,t);     /*不是最后一个因子*/
              }
          }
         else
            break;
        }
      }
    if(a!=1)                                 /*如果a不是1,那它就是最后一个因子*/
       printf("%d\n",a);
   }
  getch();
   
}
此程序借用楼主思路
[此贴子已经被作者于2006-2-9 23:15:13编辑过]

 2006-02-09 01:27
	    2006-02-09 01:27
   2006-02-09 05:36
	    2006-02-09 05:36
  解决了3楼提出的问题,我将程序改为
#include <stdio.h>
main()
{
  int N,a,i,t,n,m,k;
  scanf("%d",&N);
  for ( ;N;N--)
  {
     scanf("%d",&a);
     printf("%d=",a);
     n=a;
     m=0;k=0;
     for (i=2;i<=a;i++)
     {
         t=0;
         while (a%i==0)
         {
           t++;
           a=a/i;
         }
         if (t==1) 
         {
            if (a==1) {break;}
            else {printf("%d",i);m=0;k++;if (a!=1) printf("*");continue;}
         }
         else if (t>1) 
         {
              if ((a==1)&&(0==k)) {printf("%d^%d",i,t);m=1;break;}
              else {printf("(%d^%d)",i,t);k++;m=1;if (a!=1) printf("*");continue;}
         }
     }
     if (0==m) printf("%d",i);
     printf("\n",a);
   }
   return 0;
}
但还是不行。。。。。大家再帮忙看看吧,在此谢过各位了。。。
[此贴子已经被作者于2006-2-10 10:35:51编辑过]
 2006-02-10 10:30
	    2006-02-10 10:30
   2006-02-10 13:10
	    2006-02-10 13:10
  做一点修改就行

 2006-02-10 21:56
	    2006-02-10 21:56
  晕,oj系统输入和输出是分开的
输出结果直接被记录,输入一条输出一条的情况,系统直接判断结果的。。。
 2006-02-10 22:48
	    2006-02-10 22:48