인프런 커뮤니티 질문&답변
1629_곱셈 문제의도 질문
작성
·
278
0
오버플로우 안 발생시키려고 unsigned long long을 선언했고
10의 0승부터 m승까지 하나씩 더해서 나머지 연산자 쓰는 것과 같은 논리로
숫자의 크기에 무관하도록 string 클래스에 의존해서 1씩 추가했습니다.
그렇게 해서 stoi가 있으니 stoull이 있을 거 같아서 사용해보니
긱스포긱스 ide에 써보니 정답이 나오더라고요.
근데 백준에서는 런타임 out of range가 뜨더라고요.
제 코드의 문제를 모르겠습니다.
#include <bits/stdc++.h>
using namespace std;
typedef unsigned long long ull;
int main(){
ios_base::sync_with_stdio(false);
cin.tie(0);
cout.tie(0);
ull a;
string s ="";
while(cin>>a){
s.clear();
while(1){
s.append("1");
if(stoull(s)%a==0) break;
}
cout << s.size() << endl;
}
return 0;
}
답변 1
0
안녕하세요. RokiePlayer님ㅎㅎ
문제는 10의 몇승의 나머지를 뽑는 것이 아닙니다. 2의 몇승이 될 수도 있어요. 그래서 해당 코드는 아예 틀린 것이죠.
1. 그렇다고 해서 이게 10의 몇승의 나머지를 풀 수 있는 코드냐. 그런 것도 아닙니다. 이 문제의 범위를 볼까요? 무척 큰수가 나옵니다.
A가 10이고 B가 20만이라고 해봅시다. 이게 unsigned long long 으로 변환해서 나머지연산을 할 수 있는 수 인가요?
2. 이건 devc++에서도 out of range가 뜹니다. 만약 자신이 어떠한 로직을 작성했고 이게 틀릴 경우에는 "작은 수"를 기반으로 테스팅을 먼저 해야 합니다.
제가 해당코드를 디버깅하기 위해서 몇개 코드를 고쳐봤는데요. 참고하시기 바립니다
또 질문사항있으시면 언제든 말씀 부탁드립니다.
감사합니다.
강사 큰돌 올림.





