Исключение с плавающей точкой с большими числами и неточными результатами при замене целых чисел на длинные - PullRequest
0 голосов
/ 10 января 2020

Мне дали эту задачу, которая дает вам 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;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...