解析: 原来是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 }