Форум программистов, компьютерный форум CyberForum.ru

числа Армстронга, найти ошибку в программе - C++

Восстановить пароль Регистрация
 
maks_IQ
 Аватар для maks_IQ
21 / 21 / 0
Регистрация: 05.01.2011
Сообщений: 173
13.01.2011, 20:48     числа Армстронга, найти ошибку в программе #1
Задание следующее:
Найти числа Армстронга до опр. числа, введенного пользователем. (Числа Армстронга - числа с количеством цифр n, сумма цифр возведенных в n степень которых равна самому числу.
Например 153 - число Армстронга, т.к. 1³ + 5³ + 3³ = 153)

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
int main()
{
    setlocale(LC_ALL,"rus");
    double massiv[10000]; int step=0; int m=1; int glav=0; int glav1=0;
    int n=0;
    cout<<"Введите значение, до которого нужно найти числа Армстронга\n";
    cin>>n;
 
    for (int i=0;i<n;i++)
    {
        step=0; double a=0;
        massiv[i]=i+1; a=massiv[i];
        while(a>=1)
        {
            a/=10;
            step++;
        }
        for (int j=1;j<step;j++)
        {
            glav=glav+glav1;
 
        glav1=pow((double(int((massiv[i]/(10*m)-int(massiv[i]/(10*m))*10)))),double(step)); // тут конечно все запутано, но [I][U]вроде[/U][/I] правильно
            m*=10;
        }
        if (glav==massiv[i])
        {cout<<massiv[i];}
    }
    _getch();
    return EXIT_SUCCESS;
}
попробовал выполнить, но программа не работает. Вернее, работает, но не так как нужно:
она выводит 81, хотя это не число армстронга.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
13.01.2011, 20:48     числа Армстронга, найти ошибку в программе
Посмотрите здесь:

Найти все числа Армстронга от 1 до к C++
Помогите найти ошибку в программе составления палиндрома числа C++
Найти все n-значные числа Армстронга для данного n<9 C++
Найти все числа Армстронга от 1 до K C++
найти ошибку в программе C++
C++ найти ошибку в программе
C++ Найти все числа Армстронга, состоящие из 2, 3 или 4 цифр
C++ Найти ошибку в программе

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
13.01.2011, 22:02     числа Армстронга, найти ошибку в программе #2
maks_IQ, Ошибок много, если идти тем путем которым Вы пошли то вот вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
#include <iostream>
#include <conio.h>
#include <math.h>
using namespace std;
 
int main()
{
        setlocale(LC_ALL,"rus");
        double massiv[10000]; int step=0; int m=1; int glav=0; int glav1=0;
        int n=0;
        cout<<"Введите значение, до которого нужно найти числа Армстронга\n";
        cin>>n;
 
        for (int i=0;i<n;i++)
        {
                step=0; double a=0;
                massiv[i]=i+1; a=massiv[i];
                while(a>=1)
                {
                        a/=10;
                        step++;
                }
                glav=0; glav1=massiv[i]; 
                for (int j=0;j<step;j++)
                {
                        glav=glav+pow((double)(glav1%10), (double)step);
                        glav1/=10; 
    
                }
                if (glav==massiv[i])
                {cout<<massiv[i]<<endl;}
        }
        _getch();
        return EXIT_SUCCESS;
}
maks_IQ
 Аватар для maks_IQ
21 / 21 / 0
Регистрация: 05.01.2011
Сообщений: 173
13.01.2011, 22:33  [ТС]     числа Армстронга, найти ошибку в программе #3
valeriikozlov, все работает, спасибо;

но не могли бы вы прокомментировать изменениния? в частности
C++
1
2
3
4
5
6
for (int j=0;j<step;j++)
                {
                        glav=glav+pow((double)(glav1%10), (double)step);
                                                glav1/=10; 
    
                }
и что делает %?

Добавлено через 14 минут
Цитата Сообщение от maks_IQ Посмотреть сообщение
и что делает %?
Все, я сам понял. glav1%10 возвращает последнюю цифру числа, а glav1/=10 убирает её.
Yandex
Объявления
13.01.2011, 22:33     числа Армстронга, найти ошибку в программе
Ответ Создать тему
Опции темы

Текущее время: 14:01. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru