본문 바로가기
Code review

[C]소인수 분해

by cafrisun 2009. 5. 27.
 

소인수 분해
ex) 18 = 2*3*3

인수들을 저장할 배열을 동적으로 할당함. malloc(), free() 사용

01: #include <stdio.h>
02: #include <stdlib.h>
03:
04:
05: int main()
06: {
07:         int inData, temp, *factors;
08:         int i, divider, count = 0;
09:        
10:         printf("소인수 분해할 숫자를 입력하세요: ");
11:         scanf("%d", &inData);
12:        
13:        
14:         // 입력 값이 2보다 작거나 10000보다 크면 프로그램 종료
15:         if((inData<2) || (inData>10000))
16:         {
17:                 return 0;
18:         }
19:        
20:         // 인수의 개수 조사
21:         temp = inData;
22:         for(i=2; i<=temp; )
23:         {
24:                 if(temp%i == 0)
25:                 {
26:                         count++;
27:                         temp /= i;
28:                 }
29:                 else
30:                 {
31:                         i++;
32:                 }
33:         }
34:        
35:         // 인수의 개수(count)가 1개 이면 prime number 이므로, "소수" 출력후 종료
36:         if(count == 1)
37:         {
38:                 printf("소수\n");
39:                 return 0;
40:         }
41:        
42:        
43:         // 인수의 개수 만큼 동적 배열 생성
44:         factors = (int *)malloc(sizeof(int) * count);
45:        
46:         // 생성된 배열에 인수 저장
47:         divider = 2;
48:         for(i=0; i<count;)
49:         {
50:                 if(inData%divider == 0)
51:                 {
52:                         factors[i] = divider;
53:                         inData /= divider;
54:                         i++;
55:                 }
56:                 else
57:                 {
58:                         divider++;
59:                 }
60:         }
61:        
62:         // 배열에 저장된 인수들과 '*' 출력
63:         for(i=0; i<count; i++)
64:         {
65:                 printf("%d", factors[i]);
66:                
67:                 if(i < count-1)
68:                 {
69:                         printf("*");
70:                 }
71:         }
72:        
73:         printf("\n");
74:        
75:         // 배열 제거
76:         free(factors);
77:        
78:         return 0;
79: }


반응형

'Code review' 카테고리의 다른 글

[C]복리의 원리합계 구하기  (0) 2009.05.27
[C]파일 사이즈 구하기  (3) 2009.05.27
[WinApi]apiStart  (0) 2009.05.27