Мне дали эту задачу, которая дает вам 2 целых числа n
и m
, n
, представляющих количество цифр второго числа, а второе число является двоичным числом. Например:
n= 2
m= 11
После вычисления двоичного числа вы должны получить это число равным 0. Вы можете только вычесть 1 из двоичного числа или разделить на два. Например, в этом случае это будет:
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;
}