본문 바로가기
프로그래밍/C programming

c언어 1에서 1000사이 정수중 수를 구성한 개개의 수가 연속적으로 되어있는 수를 찾는 프로그램(for문, if~else문, break)

by 졸린이 2020. 6. 16.
반응형
1에서 1000사이 자연수 중에 수를 구성한 개개의 수가 서로 연속적으로 되어있는 수를 찾는 프로그램
예) 12, 34, 56, ..., 123, 567...

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
#include<stdio.h>
#define RANGE 1000
main() {
    int num, last, remain, flag, line = 0;
    for (int i = 10; i <= RANGE; i++) { //10부터 검사시작
        flag = 0;
        for (num = i; num != 0; num /= 10) { //i를 10으로 나눠서 한자리씩 검사
            remain = num % 10//나머지 연산으로 끝자리 수 
            if (flag == 0) {
                last = remain; //1의자리는 last에 넣고
                flag = 1;
            }
            else if (remain != last - 1
                //끝자리 수와 그 앞 수를 비교해 1차이가 나지않으면 break로 검사 종료
                //다음 수 검사
                break;
            else
                last = remain; //last를 그 다음 수로 저장하고 그 앞 수와 또 비교
        }
        if (num == 0) {
            ((line % 5== 0) ? printf("\n%4d", i) : printf("%4d", i);
            line++;
        }
    }
}
cs

4행 num : 검사할 수, last : 검사하는 수의 끝의 수(ex 123의 3, 한번 검사 후 2가 된다), remain : last와 비교할 수
flag : 처음 검사하는지 확인하는 변수, line : 출력시 줄넘길 때 필요한 변수
5행~24행 연속적으로 되어있는 수를 찾기 위해 10부터 1000까지 검사

6행 처음검사할 때 0으로 초기화

7행 자릿수를 하나씩 꺼내서 검사 (일의자리 부터 꺼내서 검사한다.)

8행 처음 검사시 1의자리 추출 다음 검사 시 10의 자리 추출

9행~11행 처음검사시 last변수에 그냥 remain을 넣고 flag를 1로 값을 변경하여 이 if문에 안들어오게 한다.

13행 두 번째 검사부터 last와 그 앞에 수와 비교해 last-1 = remain 이 성립되지 않으면 연속된 수가 아니므로 break로 for문을 나간다.

17행 앞에 else if문에 안들어가면 연속된 수로 last에 remain값을 넣고 다음 remain변수와 비교할 준비

20행~22행 for문을 끝까지 돌고 나오면 num은 0이 되어있고 검사를 끝까지 마친거면 연속적인 수이므로 출력한다.

line이 5로 나눠떨어지면 줄넘김(\n)을 하고 출력하고 아니면 그냥 출력한다.




반응형

댓글