0

我遇到了这个问题,它给你 2 个整数nmn代表第二个数字的位数,第二个数字是二进制数。例如:

n= 2          
m= 11  

计算出二进制数后,您必须将该数设为 0。您只能从二进制数中减去 1 或除以 2。例如,在这种情况下,它将是:

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

我的程序确实可以工作并显示二进制数和操作数。但是当给定大数字时,它会抛出浮点异常。我的理论是,这是因为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