已解决
[此贴子已经被作者于2006-4-11 12:51:17编辑过]
#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编辑过]
解决了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编辑过]