почему я не могу проверить функцию `pow` через` while` l oop? - PullRequest
1 голос
/ 07 мая 2020

Я пытаюсь решить эту проблему в течение часа, и это очень расстраивает, я не могу понять, почему следующий l oop просто не проверяет себя

while(p>1) {
    p--;
    if (pow(n, contor) == p) {
        contor2++;
    }
}

полный код

#include <iostream>
#include <cmath>

int main()
{
    int n, p, resetP;
    float contor = 0;
    float contor2 = 0;
    n = 3;
    p = 100;
    resetP = p;
    while (p > 1)
    {
        contor++;
        p = p / n;
    }
    p = resetP;
    while (p > 1)
    {
        p--;
        if (pow(n, contor) == p)
            contor2++;
    }

    std::cout << contor2;
}

то, что я пытаюсь сделать здесь, это проверить if(pow(3, 4)==81, но это просто не работает. p Я устанавливаю его от 100 до go один за другим в сторону 0. Когда он достигает 81, он просто проходит мимо него, как будто он просто не проверяет if, а мой contor2 остается точно так же (то есть 0). Я изучаю C ++ уже более 6 месяцев, но впервые я действительно на чем-то застрял.

1 Ответ

0 голосов
/ 07 мая 2020

Я запускал ваш код несколько раз с msvs c 19 и g ++ как с x86, так и с x64, он работал как исключено и напечатал 1, введенный в оператор if, когда p добрался до 81, а counter2 добавлено 1 вот код Я пробовал

#include <iostream>
#include <cmath>
int main() {
    int n, p, saveP = 0, resetP;
    float contor = 0;
    float contor2 = 0;
    n = 3;
    p = 100;
    resetP = p;
    while (p > 1) {
        contor++;
        p = p / n;
    }
    p = resetP;
    while (p > 1) {
        p--;
        if (pow(n, contor) == p)
            contor2++;
    }
    std::cout << contor2;
}

проверить настройки компилятора (возможно, вы не компилируете файл cpp, который редактируете), а также проверьте синтаксические ошибки (например, области действия в операторе if)

i не знаю, что такое весь ваш код, но здесь лучше объявить counter и counter2 как int, а p как float

...