0

2 番目の数値の桁数を表す 2 つの整数nとを与えるこの問題が与えられました。2 番目の数値は 2 進数です。例えば:mn

n= 2          
m= 11  

2 進数を計算したら、その数値を 0 にする必要があります。2 進数から 1 を引くか、2 で割ることができます。たとえば、この場合は次のようになります。

3->2->1   so the result is 2 since  there were 2 operations made

私のプログラムは動作し、2 進数と操作数を表示します。ただし、大きな数値を指定すると、浮動小数点例外がスローされます。私の理論では、それはints が短すぎるためです。しかし、それらをlongs に変更すると、完全に不正確な結果がスローされます。

#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;
}
4

0 に答える 0