《算法竞赛入门经典》5.4.2的题目,题目大意: 给你一个2到100的整数,把n的阶乘表示成素因子相乘的形式,从小到大输出各个素数的指数,例如825=3*52*11表示为(0, 1, 2, 0, 1),表示由0个2, 1个3, 2个5, 0个7, 1个11相乘得到。代码如下:

1 #include <cstdio> 2 #include <cstring> 3 4 const int prime[25] = {2, 3, 5, 7, 11, 13, 17, 19, 23, 29, 31, 37, 41, 43, 47, 53, 59, 61, 67, 71, 73, 79, 83, 89, 97}; 5 6 int main() 7 { 8 int cnt[25]; 9 int n; 10 while(scanf("%d", &n) != EOF && n) 11 { 12 memset(cnt, 0, sizeof(cnt)); 13 for(int i = 2; i <= n; i++) 14 { 15 int t = i; 16 for(int j = 0; j < 25; j++) 17 { 18 while(t != 1 && t % prime[j] == 0) 19 { 20 cnt[j]++; 21 t /= prime[j]; 22 } 23 } 24 } 25 printf("%3d! =", n); 26 int k = 24; 27 while(k > 0 && cnt[k] == 0) k--; 28 for(int i = 0; i <= k; i++) 29 { 30 if(i == 15) printf("\n "); 31 printf("%3d", cnt[i]); 32 } 33 printf("\n"); 34 } 35 return 0; 36 }
最初写代码时没把i的值赋给临时变量t,结果死循环了...算是教训吧,不要随意修改还有作用的变量!