소인수 분해
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 |