반응형
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)을 하고 출력하고 아니면 그냥 출력한다.
반응형
'프로그래밍 > C programming' 카테고리의 다른 글
C언어 마방진(magic square) 프로그래밍 (0) | 2020.08.10 |
---|---|
c언어 다중배열 [3][2] 제곱과 세제곱을 저장하고, 출력하는 프로그램 (0) | 2020.07.31 |
c언어 1~1000사이에 있는 수에 대해 암스트롱 수를 구하는 프로그램(각 자리 수에 세제곱의 합이 그 자신과 같아지는 수) (0) | 2020.06.16 |
c언어 러시아 농부 곱셉 알고리즘, 농부곱셈법, 이집트곱셈법 (0) | 2020.06.11 |
C언어 키보드로 입력된 문자열의 문자 수, 단어 수, 줄 수를 계산 getchar() 함수 (0) | 2020.06.08 |
댓글