Почему мой код не дает правильного вывода? - PullRequest
0 голосов
/ 19 декабря 2018

Это код для печати всех армстронговых чисел в диапазоне от m до n, введенных пользователем.Но когда я запускаю его, он не дает правильного вывода.Предположим, что я ввел m как 1, а n как 10000, он показывает только «1 является армстронгом» и ничего больше. Пожалуйста, скажите мне, если что-то не так в моем коде.

#include<stdio.h>
void main()
{

    int m,n,a,i,j=0,r; 
    printf("Enter m\n");
    scanf("%d",&m);

    printf("Enter n\n");

    scanf("%d",&n);

    for(i=m;i<=n;i++)
    {
        int temp=i;
        while(i>0)
        {
            r=i%10;
            j=j+r*r*r;
            i=i/10;
        }

        if(j==temp)
        {
            printf("%d is armstrong\n",temp);
        }


    }
}

Ответы [ 2 ]

0 голосов
/ 19 декабря 2018
for(i=m; i<=n; i++)
{
    j = 0;
    int temp = i;
    while(temp > 0)
    {
        r = temp % 10;
        j = j + r*r*r;
        temp = temp/10;
    }

    if(j == i)
    {
        printf("%d is armstrong\n", i);
    }


}

В цикле while вам нужно работать с переменной temp, чтобы оставить меня нетронутым, чтобы цикл for продолжался правильно.Перед началом нового цикла while установите j = 0, чтобы снова начать отсчет с 0. В операторе if сравните j == i, поскольку временная переменная уменьшается до 0 с помощью цикла while.

0 голосов
/ 19 декабря 2018

Я вижу две ошибки в вашей программе, j инициализируется только один раз, и вы уничтожаете управление циклом i.Для исправления инициализируйте j внутри цикла и работайте с temp вместо i.

#include<stdio.h>

int main(void)                      // modern style
{
    int m, n, i, j, r; 
    printf("Enter m\n");
    scanf("%d", &m);

    printf("Enter n\n");
    scanf("%d", &n);

    for(i = m; i <= n; i++) {
        j = 0;                      // initialise j
        int temp = i;
        while(temp > 0) {           // work with temp
            r = temp % 10;
            j = j + r * r * r;
            temp = temp / 10;
        }

        if(j == i) {
            printf("%d is armstrong\n", i);
        }
    }
}

Вывод программы:

Enter m
1
Enter n
10000
1 is armstrong
153 is armstrong
370 is armstrong
371 is armstrong
407 is armstrong
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...