[백준 5940] Math Practice (C#, C++) - soo:bak
작성일 :
문제 링크
설명
정수 A보다 큰 지수 E 중에서 2의 E제곱의 맨 앞자리가 B인 가장 작은 E를 찾는 문제입니다. 해당하는 E가 없으면 0을 출력합니다.
접근법
먼저 E를 A보다 큰 값부터 62까지 순서대로 확인합니다.
다음으로 각 E에 대해 2의 거듭제곱을 구한 뒤, 10으로 나누어 맨 앞자리만 남깁니다.
해당 자리의 값이 B와 같아지는 가장 첫 E를 출력하고, 끝까지 없으면 0을 출력합니다.
Code
C#
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
using System;
class Program {
static void Main() {
var parts = Console.ReadLine()!.Split();
var a = int.Parse(parts[0]);
var b = int.Parse(parts[1]);
for (var e = a + 1; e <= 62; e++) {
long v = 1L << e;
while (v >= 10) {
v /= 10;
}
if (v == b) {
Console.WriteLine(e);
return;
}
}
Console.WriteLine(0);
}
}
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
#include <bits/stdc++.h>
using namespace std;
typedef long long ll;
int main() {
ios::sync_with_stdio(false);
cin.tie(nullptr);
int a, b; cin >> a >> b;
for (int e = a + 1; e <= 62; e++) {
ll v = 1LL << e;
while (v >= 10) {
v /= 10;
}
if (v == b) {
cout << e << "\n";
return 0;
}
}
cout << 0 << "\n";
return 0;
}