解析:  原来是C语言老师布置的一题,这题目的难度在于输出的格式。最后不能有空格和其他字符。

  我是推迟输出的,每获得一个要输出的值就输出之前记录的值,这样保证最后一个的输出方式与众不同。也可以记录在数组中。

  这一次写比上一次高效多了。

 1 #include <stdio.h>
 2 #include <math.h>
 3 
 4 static int is_prime(long j);
 5 
 6 int main()
 7 {
 8     long j, a, r;
 9     while(scanf("%ld", &a) == 1 && a){
10         printf("%ld = ", a);
11         if(a < 0){
12             a = -a;
13             printf("-1 x ");
14         }
15         if(is_prime(a)){
16             printf("%ld\n", a);
17             continue;
18         }
19         for(j = 2; j <= a; j++)
20             if(a % j == 0)
21                 if(is_prime(j)){
22                     r = j;
23                     a /= r;
24                     break;
25                 }
26         if(is_prime(a)){
27             printf("%ld x ", r);
28             printf("%ld\n", a);
29             continue;
30         }
31         for(j = r; j <= a; j++)
32             if(a % j == 0){
33                 if(is_prime(j)){
34                     printf("%ld x ", r);
35                     r = j;
36                     a /= r;
37                     j--;
38                 }
39                 if(is_prime(a)){
40                     printf("%ld x ", r);
41                     r = a;
42                     break;
43                 }
44             }
45         printf("%ld\n", r);
46     }
47     return 0;
48 }
49 static int is_prime(long j)
50 {
51     int f, t, i;
52     t = (int)sqrt((double)j);
53     f = 1;
54     for(i = 2; i <= t; i++)
55         if(j % i == 0){
56             f = 0;
57             break;
58         }
59     return f;
60 }