http://acm.hdu.edu.cn/showproblem.php?pid=1405
任何数都可以用若干个质数组成,这道题就是求一个数有哪些质数组成,其中相同的要用次方表示。负数时,结束程序。
但是这道题有巨坑,就是格式。
1,每个输出数字后面都有空格(每组输出最后有一个空格) 2,两测试数据间有空行(最后一组数据后面没有空行)
真是坑爹的格式啊啊啊啊!
#include"stdio.h" #include"stdlib.h" #include"math.h" #include"string.h" int a[65540]; int main() { int s,n,i,m=1,flag,f=0; //f纯属格式需要 while(scanf("%d",&s)!=EOF) { if(s<0) break; memset(a,0,sizeof(a)); //初始化 flag=0; n=s; for(i=2;n!=1; ) //求质数因子 { if(n%i==0) { a[i]++; //在开辟的数组相应位置+1,这种作法只能用于数字不大的情况 n=n/i; i=2; } else i++; } if(f) printf(" "); f=1; printf("Case %d. ",m++); for(i=2;i<=s;i++) { if(a[i]!=0) { printf("%d %d ",i,a[i]); flag=1; //之前以为每行最后不要空格,弄个格式,请无视. } } printf(" "); } }