Контроль не выходит за пределы 45-й линии - PullRequest
0 голосов
/ 16 февраля 2020

Вопрос в следующем.

Q) Разработайте функцию f1, чтобы принимать целочисленный аргумент, инвертировать цифры и вернуть обратное значение. Кроме того, разработайте другую функцию f2, чтобы принимать два целочисленных аргумента x и n и возвращать значение x, возведенное в степень n. Возвращаемое значение f2 должно быть передано в f1, а возвращаемое значение f1 должно быть проверено, является ли оно простым или нет другой функцией f3. Результат должен быть напечатан в программе.

Элемент управления не выходит за пределы 45-й строки в этом коде. Я действительно не знаю, в чем здесь проблема, потому что, когда я запускаю код в блоках кода, на экране вывода отображается вывод f2, а затем он остается бездействующим. например, если я задаю входные данные как 8 и 2, то выходные данные возвращают значение 81, а затем ничего не делают.

    #include <stdio.h>
    #include <math.h>
    int f1(int npow)
    {
        int ret=0;
        while (npow>0)
        {
            ret=(ret*10)+(npow%10);
        }
        return ret;
    }
    int f2(int x,int n)
    {
        int res;
        res=pow(x,n);
        return res;
    }
    int f3(int resrev)
    {
        int i,check;
        for (i=2;i<resrev;i++)
        {
            if (resrev%i==0)
            {
                check =1;
                break;
            }
            else
            {
                check=0;
                break;
            }
        }
        return check;
    }
    void main()
    {
        int resrev,x,n,npow,prime;
        printf("Enter two numbers x and n\n");
        scanf("%d %d",&x,&n);
        npow=f2(x,n);
        printf("x to the power n is %d\n",npow);
        resrev=f1(npow);
        printf("Reversed value of x to the power n is %d \n",resrev);
        prime=f3(resrev);
        if (prime==1)
            printf("It is not a prime number \n");
        else
            printf("It is a prime number\n");
    }

Ответы [ 2 ]

0 голосов
/ 16 февраля 2020

L oop внутри f1 является бесконечным условием для выхода, в то время как l oop не изменяется.

фрагмент должен быть обновлен следующим образом,

int f1(int npow)
{
   int ret=0;
   while (npow>0)
   {
        ret=(ret*10)+(npow%10);
        npow /= 10; // divide to remove lsb digit
   }
   return ret;
}
0 голосов
/ 16 февраля 2020

Проблема в функции f1. Это бесконечное условие l oop.

L oop равно до npow> 0 , но вы не обновляете значение npow в l oop . Ниже исправлен код:

int f1(int npow)
{
    int ret=0;
    while (npow>0)
    {
        ret=(ret*10)+(npow%10);
        npow = npow/10;
    }
    return ret;
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...