1581, 78/80 회원가입  로그인  
   소울
   http://souldesign.pe.kr
   [자작] [C문제] 소수만 걸러내기

http://www.hackerschool.org/HS_Boards/zboard.php?id=Free_Lectures&no=1440 [복사]


[filtering_prime_number.c]

Q. 입력파일에 입력된 숫자들 중 소수(Prime Number)만을 골라내 출력하라.

<입/출력파일 예>
[input.txt]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30

[output.txt]
2 3 5 7 11 13 17 19 23 29


A. 예제소스

#include <stdio.h>
#include <string.h>
#include <math.h> //sqrt(제곱근, 루트)를 사용하기 위해 math.h 인클루드

const int MAX_SIZE = 255; //상수를 const로 정의

int isPrimeNum(int num); //함수의 원형 선엉

int main(void) {
        FILE * input = fopen("input.txt", "r"); //입력 파일
        FILE * output = fopen("output.txt", "w"); //출력 파일

        char txt[MAX_SIZE]; //input.txt의 내용을 저장할 문자열
        char tmp[10] = ""; //루프를 돌때마다 생기는 숫자를 저장
        char nums[MAX_SIZE]; //소수들을 저장할 문자열, 출력에 사용

        fgets(txt, sizeof(txt), input); //input.txt >> txt
        
        int i;
        for(i=0; i<=strlen(txt); i++) {
                if(txt[i] != ' ' && txt[i] != '\0') { //txt의 i번째 문자가 공백(' ')이 아니고 널문자가 아닐 때
                        tmp[strlen(tmp)] = txt[i]; //tmp에 txt의 i번째 문자를 추가
                } else {
                        if(isPrimeNum(atoi(tmp)) == 1) { //tmp에 저장된 내용을 숫자로 바꾼 것(atoi)이 소수일 때
                                //숫자를 구분하기 위한 공백 추가
                                if(strlen(nums) != 0)
                                        strcat(nums, " ");

                                strcat(nums, tmp); //nums 문자열에 tmp 추가
                        }
                        memset(tmp, 0, sizeof(tmp)); //tmp의 내용을 초기화
                        
                }
        }

        fprintf(output, nums);
        
        fclose(input);
        fclose(output);

        return 0;
}

//인자로 받은 num이 소수일 때 1을 리턴함
int isPrimeNum(int num) {
        if(num == 1 || num == 0) //num이 0 또는 1일 때 합성수
                return 0;

        //√num만큼 i를 돌려서 나누어떨어지는 수가 있으면 합성수
        int i;
        for(i=2; i<=sqrt(num); i++) {
                if(num%i == 0)
                        return 0;
        }

        return 1;
}

  Hit : 7914     Date : 2010/03/20 05:28



    
Myers 굳~ 2010/03/21  
Cpgroot 좋은정보 감사합니다. 2010/08/18  
41   리눅스 설치하기 - 기초편[5]     소유
10/06 11192
40   리눅스 설치하기 - 팁편     소유
10/06 8803
39   리눅스 설치하기 - 파티션편[6]     소유
10/06 9448
38   리눅스 설치하기 - 디렉토리편     소유
10/06 9198
37   앞으로 이어질 글에 대해서.....[2]     소유
10/06 8418
36   리눅스 설치하기 - 쉘편[2]     소유
10/07 9572
35   리눅스 설치하기 - RPM편[3]     소유
10/09 9530
34   [잡] 네트워크 IP[5]     소유
11/01 10062
33   [잡] 네트워크 TCP[8]     소유
10/31 9070
32   인터넷에 리눅스 서버 구축하기[1]     소유
07/07 14678
31   왜 C 이어야 하는가 ?[96]     소유
04/09 24654
30   Overflow 공격 기법들에 대한 정리 by 버스트     소유
07/07 15627
29   버퍼오버플로우 by 오하라[3]     소유
07/07 15206
28   Format String Attack - Concept and General Exploit (by Seo SungHyen)[6]     소유
07/07 11370
27   [자작] FTZ 트레이닝 1~10까지 간단하게 정리[14]     소울
03/01 14897
26   [자작] 윈도우 cmd 팁 - 복사하기[7]     소울
03/01 9120
25   [자작] [C문제] 점(.)을 뺀 문자 출력하기[1]     소울
03/20 6726
  [자작] [C문제] 소수만 걸러내기[2]     소울
03/20 7913
23   [자작] [C문제] 대소문자 바꾸기[3]     소울
03/20 7144
22   IP 와 PORT[8]     송시
11/02 9971
[1]..[71][72][73][74][75][76][77] 78 [79][80]

Copyright 1999-2024 Zeroboard / skin by Hackerschool.org / Secure Patch by Hackerschool.org & Wowhacker.com