KU COSE101 2017기말고사 1번 문제
2016 기출 | 1번 | 2번 | 3번 | 4번 | 5번 | |
2017 기출 | 1번 | 2번 | 3번 | 4번 | 5번 | |
2018 기출 | 1번 | 2번 | 3번 | 4번 | 5번 | 6번 |
기존 기출 문제에 기술적 오류가 있어 약간 수정하였습니다.
뒤집어서 더하기 연산은 어떤 양의 정수가 주어졌을 때 그 수를 뒤집어서 더한 값을 출력하는 것이다. C언어로 구현한 함수 flipadd()는 이 연산을 수행하며 다음과 같은 결과를 출력한다.
flipadd(123) = 123 + 321 = 444
flipadd(195) = 195 + 591 = 786
이 함수를 몇 차례 반복 적용하면 앞으로 읽으나 뒤로 읽으나 같은 값이 되는 회문수(palindrome number)가 된다. 예를 들어 195를 시작으로 flipadd()를 몇 차례 적용하면 회문수인 9339가 출력된다.
flipadd(195) = 195 + 591 = 786
flipadd(786) = 786 + 687 = 1473
flipadd(1473) = 1473 + 3741 = 5214
flipadd(5214) = 5214 + 4125 = 9339
대부분의 정수는 이 단계를 몇 단계만 반복하면 회문수가 된다. 그렇지만 어떤 수는 1,000번 정도 반복해도 회문수가 되지 않는다. n개의 숫자를 입력으로 받아 입력값 그 숫자가 회문수가 되는데 소요되는 반복횟수, 그리고 마지막으로 계산된 회문수를 출력하는 프로그램을 작성하시오. 입력파일의 첫 줄은 총 몇 개의 숫자가 있는지를 나타낸다.
만일 1,000 회 적용했는데도 회문이 되지 않는 경우 반복횟수와 마지막 필드의 값에 -1 을 출력한다. 만약 팰린드롬을 계산하는 도중, int의 범위가 넘어가도 -1을 출력한다.
input.txt
4
195
265
196
750
output
195 4 9339
265 5 45254
196 -1 -1
750 3 6666
#include<stdio.h>
//flipadd and other functions are defined here
int solve(int n, int* count) {
}
int main() {
FILE* fp;
int num;
//fill this part
for(int i=0 ; i<num ; i++){
int n, res;
int count;
fscanf(fp, "%d", &n);
res = solve(n, &count);
printf("%d %d %d\n", n, count, res);
}
//fill this part
}
Comments