问题描述
一只猴子J和n-1个同伴被困在了水帘洞。他们需要选一个大王,所以他们决定围成一个圈然后1~2报数,报到2的人出圈,最后留在圈里的人成为大王。J想当大王,他想计算出自己的位置成为最后一个在圈里的人。
输入形式
输入包含1个测试用例。每个用例一行,一个整数n
,表示站成一圈的猴子数。这个数字的表示使用如下形式
x
y
e
z
xyez
xyez 表示最高位是
x
x
x,次高位是
y
y
y,后面有
z
z
z个0
,十进制数字。如
12
e
5
=
1200000
12e5=1200000
12e5=1200000
0
≤
x
,
y
≤
9
,
0
≤
z
≤
6
,
n
≥
0
0 \leq x,y \leq 9, 0\leq z \leq 6, n\geq 0
0≤x,y≤9,0≤z≤6,n≥0
输出形式
输出包含一个整数,为最后一个在圈里猴子一开始站的位置。所有人按照的顺序围成一个环,并且报数从号开始,沿着编号增大的顺序报数。
样例输入
05e0
样例输出
3
代码1
#include <iostream>
#include<cmath>
using namespace std;
int main()
{
int a, b;
char c;
cin >> a>> c >>b;
long long int n = a * pow(10, b);
int k = log(n) / log(2);
n = 2 * (n - pow(2, k)) + 1;
cout << n;
}