печатать Amstrong нет от 100 до 10000 в с - PullRequest
0 голосов
/ 06 марта 2019

код не выдает никакой ошибки, но не выдает желаемый вывод, используя ubuntu для выполнения, но вывод не показывает, что выводится только одно значение: Amstrong no от 100 до 10000 v v v

/* Print Amstrong no from 100 to 10000 */
#include<stdio.h>
#include<math.h>
void main()
{
    int orignal,rem,no,result=0,n=0,i;
    printf("Amstrong no from 100 to 10000 are\nv\nv\nv\n");
    for(i=100;i<=1000;i++)
    {
        orignal=i;
        while(orignal!=0)
        {
            orignal/=10;
            ++n;
        }
        orignal=i;
        while(orignal!=0)
        {
            rem=orignal%10;
            result+=pow(rem,n);
            orignal/=10;
        }
        if(result==i)
            printf("%d\n",i);
        result=0;
        n=0;
    }
}

Ответы [ 2 ]

0 голосов
/ 06 марта 2019

Итак, я попытался запустить ваш код и получил следующий вывод:

Amstrong no from 100 to 10000 are
v
v
v
371

Итак, выводится 371.Проблема в том, что переменные n и result должны быть сброшены в конце цикла, поэтому у вас есть:

#include<stdio.h>
#include<math.h>
void main()
{
    int orignal,rem,no,result=0,n=0,i;
    printf("Amstrong no from 100 to 10000 are\nv\nv\nv\n");
    for(i=371;i<=1000;i++)
    {
        orignal=i;
        while(orignal!=0)
        {
            orignal/=10;
            ++n;
        }
        orignal=i;
        while(orignal!=0)
        {
            rem=orignal%10;
            result+=pow(rem,n);
            orignal/=10;
        }
        if(result==i)
            printf("%d\n",i);

        n=0;
        result = 0;
    }
}

И окончательный вывод, который также является правильным:

Amstrong no from 100 to 10000 are
v
v
v
371
407
0 голосов
/ 06 марта 2019

Вы не сбрасывали значение n и результат. Оба суммировали для каждой итерации, таким образом, обеспечивая неправильный вывод. Также проверьте диапазон.

#include<stdio.h>
#include<math.h>
void main()
{
    int orignal,rem,no,result=0,n=0,i;
    printf("Amstrong no from 100 to 10000 are\n");
    for(i=100;i<=1000;i++) //153 is a armstrong number!
    {
        result=0, n=0; //have to reset for each number
        orignal=i;
        while(orignal!=0)
        {
            orignal/=10;
            ++n;
        }
        orignal=i;
        while(orignal!=0)
        {
            rem=orignal%10;
            result+=pow(rem,n);
            orignal/=10;
        }
        if(result==i)
            printf("%d\n",i);

    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...