njchung99   6년 전

배열을 넉넉하게 잡아줬는데 런타임에러가 어디서뜨는지모르겠습니다...

snrnsidy   6년 전

for (int i = 0; i < m - 1; i++)
y *= y;

여기서 m=5이면 y^5을 계산하는 것이 아니라 그것보다 휠씬 더 커지기 때문에 sum은 자료형 범위를 넘게 되서 이상한 값이 되고 그것 때문에 문제가 생기는 거 같습니다.

아마 아래와 같이 수정하시면 될 거 같아요. 

jh0956   4년 전

@snrnsidy 님 덕분에 문제를 해결했습니다 감사합니다.

활동내역 확인하니 최근에도 문제풀고 계시는거 같아서 질문좀 드릴 수 있을까 싶어 글 남겼습니다!

솔직하게 차이를 잘 모르겠습니다.

sum 이 int형 범위내에 있고 사실상 문제는 배열의 범위가 많아도 6*9^5 = 36만 정도인데

가장 큰 정수 9 를 5제곱해도 사실상 int형 범위에 영향을 미치는건지 모르겠습니다.

int y = prev % 10;
int t = 1;
for (int i = 0; i < m; i++)
t *= y;
sum += t;
prev = prev / 10;

이부분에서 굳이 sum 에 값을 더해줄 때 

int t = 1 라는 변수를 설정해서 해줘야하는 건가요?

왜 m-1 만큼 y*=y 를 해서 더해주면 안되는지 너무 궁금합니다

snrnsidy   4년 전

1년 전이라서 기억이 가물가물 했네요.

y*=y로 계산을 해버리면 

y^2,y^4,y^8,y^16 이런식으로 값이 계산 됩니다.

5제곱을 제대로 못구하게 되는거죠...

아마 직접 출력해보시면 무슨 말인지 와닿으실거에요

jh0956   4년 전

아 맞네요 ㄷㄷㄷ;;;; 당연히 ^2 ^4 ^6 가겠네요

감사합니다~

댓글을 작성하려면 로그인해야 합니다.