Печать номеров Армстронга на С - PullRequest
0 голосов
/ 26 января 2019

Это программа для поиска числа Армстронга в диапазоне от 1 до 1000 (сумма кубов каждой цифры числа равна самому числу). Она правильно печатает некоторые числа, но не печатает 153. Мой вопрос заключается в том, чтопочему дело 153 исключено?Заранее спасибо.

#include<stdio.h>
#include<math.h>
void main()
{
    int i,save,rem;
    for(i=1;i<1000;i++)
    {
        int s=0;
        int save=i;                        /*Creating copy of the 
                                           variable i.*/
        while(save!=0)
        {
            rem=save%10;
            save/=10;
            s+=pow(rem,3.0);
        }
        if(i==s)                           //Comparing i with the sum.
            printf("\n%d",i);              //Printing armstrong number.
    }
}

Скриншот окна вывода

Ответы [ 2 ]

0 голосов
/ 26 января 2019

Я сделал некоторые изменения в вашей программе, такие как печать 1-значных чисел, так как они являются армстронговыми числами, и избегая функции с плавающей запятой и других незначительных изменений, которые можно увидеть в комментарии в коде.

#include<stdio.h>
#include<math.h>
void main()
{
    int i,save,rem;
    for(i=1; i<= 1000;i++)
    {
        int s=0;
        int save=i;                        /*Creating copy of the    variable i.*/
        while(save!=0)
        {
            rem=save%10;
            save/=10;
            int temp = rem;
            for(int j = 1; j < 3; ++j) {  // power function
                rem = rem * temp;
            }
            s+=rem;
        }
        if(i==s)                           //Comparing i with the sum.
            printf("%d\n",i);              //Printing armstrong number.
    }
}

Выход

1 153 370 371 407

Редактировать: Я внес изменения в соответствии с ОП определяет номер Армстронга

0 голосов
/ 26 января 2019

Использование gcc в Windows 7 работает с Pow. Однако этот код может помочь вам избежать округления с помощью pow ().

Этот код также упрощает зацикливание и удаляет повторное объявление сохранения.

#include <stdio.h>

int main(void) {

    int i, sum, ones, tens, hunds;
    for(i = 1; i < 1000; i++) {

        sum = i/10;
        ones = i%10;
        tens = sum%10;
        hunds = sum/10;

        sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;


        if(i == sum)
            printf("\n%d", i);

    }

}

EDIT

Основываясь на комментариях @Brij Raj Kishore, в случае, если пост действительно намеревался отобразить все числа Армстронга 1-1000, замените следующую петлю для вышеупомянутой.

for(i = 1; i < 1000; i++) {

    sum = i/10;
    ones = i%10;
    tens = sum%10;
    hunds = sum/10;

    if(!(hunds | tens))
        sum = ones;
    else if (hunds == 0 && tens != 0)
        sum = ones*ones + tens*tens;
    else
        sum = ones*ones*ones + tens*tens*tens + hunds*hunds*hunds;

    if(i == sum)
        printf("\n%d", i);

}
...