2 番目の数値の桁数を表す 2 つの整数n
とを与えるこの問題が与えられました。2 番目の数値は 2 進数です。例えば:m
n
n= 2
m= 11
2 進数を計算したら、その数値を 0 にする必要があります。2 進数から 1 を引くか、2 で割ることができます。たとえば、この場合は次のようになります。
3->2->1 so the result is 2 since there were 2 operations made
私のプログラムは動作し、2 進数と操作数を表示します。ただし、大きな数値を指定すると、浮動小数点例外がスローされます。私の理論では、それはint
s が短すぎるためです。しかし、それらをlong
s に変更すると、完全に不正確な結果がスローされます。
#include <bits/stdc++.h>
using namespace std;
int main()
{
int n, m, g, l, f, x, k, w;
cin >> n >> m;
g = pow(10, n);
k = pow(2, n - 1);
for (int i = 1; i <= n; i++)
{
l = m % g;
f = l / (g / 10);
if (f == 1)
{
x += k;
}
k /= 2;
g /= 10;
}
cout << x << endl;
while (x != 1)
{
if (x % 2 == 0)
{
x /= 2;
}
else
{
x -= 1;
}
w++;
}
cout << w;
return 0;
}