UVa 160 Factors and Factorials

  《算法竞赛入门经典》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相乘得到。代码如下:

View Code
 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,结果死循环了...算是教训吧,不要随意修改还有作用的变量!

原文地址:https://www.cnblogs.com/xiaobaibuhei/p/3061102.html