카이사르 암호는 암호화 방법 중 하나로서 몇 칸을 뛰어 나중 문자로 암호화하는 방법이다. 예를 들어, 한 칸 나중 문자로 암호화할 경우 "attack at dawn"을 "buubd!bu!ebxo"로 암호화할 수 있다. a 다음의 문자가 b이며, 아스키코드 표의 빈칸 다음 문자가 !이기 때문이다. 이 방법에서는 몇 칸을 건너 뛸 것인가가 바로 암호를 풀 수 있는 키(Key)라 할 수 있다. 키와 문자열을 입력받아 그것을 암호화하는 프로그램을 작성해보자. 단, 프로그램은 한 번만 실행된다.
출력 예 )
> Enter the key.
> 3(Enter)
> Enter the text.
> I like spring(Enter)
> The cipher text is, L#olnh#vsuqj.
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> int main() { int n; char c[100]; printf("Enter the key.\n"); scanf("%d%*c", &n); printf("Enter the text.\n"); gets(c); for (int i = 0; i < 100; i++) { if (c[i] == NULL) { break; } c[i] += n; printf("%c", c[i]); } return 0; } | cs |
char형 배열의 특징과 더불어 char와 ASCII코드와의 연관을 잘 이해하고 있어야 하는 문제였다.
다음과 같은 참조 자료들을 통해 왜 gets함수를 사용하였으며, scanf에 %d%*c 와 같은 녀석을
썻는지 참고하자.
배열을 쓰지 않고도 풀 수 있는 문제엿다.
입력버퍼를 이용한다더라.
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | #include <stdio.h> int main() { int n; char ch; printf("Enter the key.\n"); scanf("%d", &n); printf("Enter the text.\n"); scanf("%c", &ch); printf("The cipher text is, "); while (ch != '\n') { printf("%c", ch + n); scanf("%c", &ch); } return 0; } | cs |
'옛날' 카테고리의 다른 글
[8d] 2839 : 설탕 배달 (0) | 2018.04.14 |
---|---|
ㅁㄴㅇ (0) | 2018.04.14 |
[6d] 10817 : 세 수 (0) | 2018.04.11 |
[5d] 9498 : 시험 점수 (0) | 2018.04.06 |
[4d] 11721 : 열 개씩 끊어 출력하기 (NEED FIX) (0) | 2018.04.05 |