题目如下:
这道题目的思路很清晰,但是其中需要注意一下这里if的条件。本来我是写的n>1,但是提交后有一个测试点错误,弄了半天才搞清楚,n=1有两种情况,一种为素数,一种为完全平方数。这两种情况程序测试点采用的是两种不同的处理,素数输出本身,完全平方数输出开平方后的数。
if(n>=1)
{
printf("%d\n",n);
for(i=0;i<n;i++)
{
printf("%d",b+i);
if(i!=n-1)
printf("*");
}
}
else
{
printf("1\n%d",a);
}
好了,代码如下:
#include<stdio.h>
#include<math.h>
#include<stdlib.h>
int main()
{
int a,b=0,n=0,m,i,j;//b是连续因子起点,n是连续因子个数,m临时存放连续因子个数
scanf("%d",&a);
if(1>=a||a>=pow(2,31))
exit(-1);
for(i=2;i<=sqrt(a);i++)
{
j=i;
m=0;
int c=a;//这一步很重要!在下面while循环时,若不将a的值赋给c,则a的值将会发生改变!
while(c%j==0)//判断能否整除
{
c=c/j;
j++;//因子加一
m++;//暂时个数加一
}
if(m>n)
{
b=i;//起点为i
n=m;
}
}
if(n>=1)
{
printf("%d\n",n);
for(i=0;i<n;i++)
{
printf("%d",b+i);
if(i!=n-1)
printf("*");
}
}
else
{
printf("1\n%d",a);
}
return 0;
}
希望对大家有所帮助!