我遇到了这个问题,它给你 2 个整数n
和m
,n
代表第二个数字的位数,第二个数字是二进制数。例如:
n= 2
m= 11
计算出二进制数后,您必须将该数设为 0。您只能从二进制数中减去 1 或除以 2。例如,在这种情况下,它将是:
3->2->1 so the result is 2 since there were 2 operations made
我的程序确实可以工作并显示二进制数和操作数。但是当给定大数字时,它会抛出浮点异常。我的理论是,这是因为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;
}