백준 거의 처음 하면서 막 풀었던 거 찾았는데, 내가 푼 코드 보면서 의문 생김..
거의 마지막 줄 보면, printf("%d") 썼는데 변수 지정을 안 했음. 근데 그 당시엔 발견도 못했는데 문제는 맞았음.
원래 이거 처음 선언한 변수 메모리에서 알아서 꺼내 쓰는 거임?
이젠 심지어 c도 안 해서 걍 모르겠음 그냥 ㅈㄴ 궁금한데.. 참고로 문제 번호 9506임
#include<stdio.h>
int main() {
int n; scanf("%d", &n); int dir[10000];
for(; n != -1;) {
int indxe = 0; int sum = 1;
for(int i = 2;i <= n/2 ;i++) {
if(n%i == 0) {sum += i; dir[indxe] = i; indxe++;}
else continue;
}
if(n == sum) {
printf("%d = 1 ", n);
for(int i = 0; i < indxe; i++) printf("+ %d ", dir[i]);
printf("\n");
}
else printf("%d is NOT perfect.\n");
scanf("%d", &n);
}
}
printf는 인자가 몇개인지 모르기 때문에, %d가 보일때마다 레지스터 몇번, 그다음은 스택에서 값을 알잘딱하게 꺼내오게 되어 있음. %d를 쓰고 인자를 안넘겼는데 맞은건 레지스터 1번에 운좋게 결과값이 있었던 것 - dc App
그니까 일반적으론 내가 맨 처음 선언한 변수가 나올 수밖에 없던거네?
따로 변수 지정 안 해주면 더미 값이나 에러 나올 거 같은데 희한하게 여기는 알잘딱 출력해주네
C도 사실 알잘딱 해주는 고급언어였던거임 ㄷㄷ - dc App
거기로 안빠지는 거겠지
ㄴㄴ not perfect는 예제에도 나옴 - dc App