정답률 낮을 때부터 알아봤어야 했다.. 정답률이 저런데 문제는 쉬워서 이상하다 생각했지
그냥 단순히 나머지를 기준으로 수를 구하려고 했다. 입력이 2000000이라 터질 껄 예상해서 long long으로 받았다. 그런데 또 어디선가 문제 생겼나보다ㅎㅎ
#include <iostream>
using i64 = long long;
int main() {
int n;
i64 sum = 0;
scanf("%d", &n);
for(int i = 1; i < n; i++){
sum += i*n + i;
}
printf("%lld", sum);
return 0;
}
흑흑.. 뭐가 문제야.. 이것도 내일 다시봐야겠다.
음.. 로직은 맞고 틀렸다면 터져서 틀린 것 같았다.
계산해봤더니 터질 수도 있겠다 싶었다. 그래서 unsigned long long을 써서 했다. 하지만 결과는 long long과 같다.. 뭐가 문제인지 모르겠음..
#include <iostream>
using i64 = unsigned long long;
int main() {
i64 n;
i64 sum = 0;
scanf("%lld", &n);
for(i64 i = 1; i < n; i++){
sum += i*n + i;
}
printf("%llu", sum);
return 0;
}
엥.. 엉...
엥..
n은 int 범위로 받을 수 있어서 그냥 int로 받았는데 이걸 long long으로 고치니깐 해결됐다.. 엥.. 엉.. 엥...
내 생각에는 i와 n이 int형이라 계산결과가 int가 된 건가.. 음.. 엉..
i와 n이 int형이라 계산 결과가 int형이고 sum에 더할 때 i64로 변경하기 때문에 이미 오버플로우가 발생한 상태로 값을 넣게 된다ㅋㅋㅋㅋ 계산하는 값중 하나라도 64비트면 결과도 64비트로 맞춰지지만 (암시적 형변환은 작은 쪽이 큰 쪽에 맞춤) 둘다 32비트면 결과도 32비트가 된다. 알아두자!
'백준' 카테고리의 다른 글
1408 24 (0) | 2019.10.27 |
---|---|
2578 빙고 (0) | 2019.10.26 |
2851 슈퍼마리오 (0) | 2019.10.25 |
2460 지능형기자 2 (0) | 2019.10.25 |
11365 !밀비급일 (0) | 2019.10.25 |