A에서 B로 만들지 않고 B에서 A로 만드는 걸 생각했다.
우선 cnt=1로 초기화시켜주고(왜냐면 while에서 tmp가 a와 같으면 종료하기 때문!)
2를 나눠서 나머지가 0이라면 2를 나누고, 10을 나눠서 나머지가 1이 되면 1을 빼주고 10을 나눠준다.
만약 이도 저도 아니라면 만들 수 없다는 것이므로 break,
그대로 cnt를 세서 출력시켜주면 끝!
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
|
#include <iostream>
#include <algorithm>
using namespace std;
int main(void) {
cout.tie(NULL);
cin.tie(NULL);
ios_base::sync_with_stdio(false);
long long a, b;
cin >> a >> b;
long long tmp = b;
int cnt = 1;
while (tmp!=a) {
if(tmp<a) break;
if (tmp % 2 == 0) {
tmp /= 2;
}
else if (tmp % 10 ==1) {
tmp -= 1;
tmp /= 10;
}
else break;
cnt++;
}
if (tmp == a) cout << cnt;
else cout << -1;
return 0;
}
|
cs |