Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/35: Рейтинг темы: голосов - 35, средняя оценка - 4.71
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 6
1

Является ли натуральное число совершенным. С++.

11.01.2012, 12:02. Просмотров 6695. Ответов 5
Метки нет (Все метки)

Составьте программу,которая проверяет,является ли натуральное число,введенное с клавиатуры совершенным.
Нужна помощь, если кто сталкивался с такой задачей напишите пожайлуста!
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.01.2012, 12:02
Ответы с готовыми решениями:

Определить, является ли заданное натуральное число совершенным
Помогите пожалуйста с задачей Вот условие: Определить, является ли заданное натуральное число...

Определить является ли заданное натуральное число совершенным
1) Составьте программу проверяющую,является ли заданное натуральное число совершенным, т. е. равным...

Проверить, является ли заданное натуральное число совершенным
#include <iostream> #include <conio.h> using namespace std; int main(); { setlocale...

Проверить, является ли заданное натуральное число совершенным
#include <iostream> #include <conio.h> using namespace std; int main(); { setlocale...

5
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
11.01.2012, 12:19 2
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
#include <iostream>
 
bool is_perfect(int num)
{
    int sum = 0;
 
    for (int d = num / 2; d >= 1; --d)
        if (num % d == 0)
            sum += d;
 
    return sum == num;
}
 
int main()
{
    int num;
 
    std::cout << "Enter number: ";
    std::cin >> num;
 
    std::cout << "Number is " << (is_perfect(num) ? "" : "not ") << "perfect" << std::endl;
 
    return 0;
}
2
yuraiow
26.04.2013, 13:45 3
silent_1991, а не подскажешь как реализовать эту программу при помощи классов?
:)
Эксперт С++
4763 / 3257 / 497
Регистрация: 19.02.2013
Сообщений: 9,046
26.04.2013, 14:16 4
yuraiow, тут в класс оборачивать нечего. Одна функция проверки.
0
yuraiow
26.04.2013, 14:20 5
Tulosba, нет, надо объявить в класс натуральное число
Эксперт С++
5036 / 3096 / 271
Регистрация: 11.11.2009
Сообщений: 7,047
26.04.2013, 14:30 6
yuraiow, а есть ли в этом смысл? Я такового не вижу. Главным аргументом против использования классов выступает то, что сложно придумать, какое у этого класса должно быть состояние, по сути данный алгоритм обладает только поведением. Но если подобным вопросом не задаваться - я вижу несколько возможных решений:
1. В составе класса IntegerUtils, который наряду с другими алгоритмами (например, проверки числа на простоту) содержит и этот:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
class IntegerUtils
{
public:
    // Другие методы
    
    static bool is_perfect(int num)
    {
        int sum = 0;
        
        for (int d = num / 2; d >= 1; --d)
            if (num % d == 0)
                sum += d;
        
        return sum == num;
    }
    
    // Другие методы
};
2. Класс, состояние которого - число, для которого определяем совершенность, и который кэширует результат, чтобы избежать повторного вычисления, если только само число не изменилось извне:
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
36
37
38
39
40
41
42
43
44
45
46
47
48
class CachedPerfectnessChecker
{
public:
    CachedPerfectnessChecker(int number):
        m_number(number),
        m_value_changed(true),
        m_cache(false)
    {
    }
    
    int get_number() const
    {
        return m_number;
    }
    
    void set_number(int number)
    {
        if (get_number() != number)
        {
            m_number        = number;
            m_value_changed = true;
        }
    }
    
    bool is_perfect()
    {
        if (m_value_changed)
        {
            int sum = 0;
            int num = get_number();
            
            for (int d = num / 2; d >= 1; --d)
                if (num % d == 0)
                    sum += d;
            
            m_value_changed = false;
            m_cache         = (sum == num);
        }
        
        return m_cache;
    }
    
private:
    int m_number;
    
    bool m_value_changed;
    bool m_cache;
};
3. Ну и в качестве бонуса - вычисление на стадии компиляции (хотя это only for lulz, ибо последнее число, на котором компилятор согласился развернуть шаблон - 1797, а до этого числа совершенных чисел всего 3):
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template<int N, int D>
struct IsPerfectHelper
{
    static const int result = IsPerfectHelper<N, D - 1>::result + ((N % D == 0) ? D : 0);
};
 
template<int N>
struct IsPerfectHelper<N, 0>
{
    static const int result = 0;
};
 
template<int N>
struct IsPerfect
{
    static const bool result = (N == IsPerfectHelper<N, N / 2>::result);
};
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
26.04.2013, 14:30

Заказываю контрольные, курсовые, дипломные и любые другие студенческие работы здесь.

Определить, является ли заданное натуральное число совершенным
Определить, является ли заданное натуральное число совершенным, т.е. равным сумме всех своих...

Ввести натуральное число N. Определить, является ли оно совершенным
Здравствуйте. Помогите пожалуйста с лабораторной... В 1. Ввести натуральное число N. Определить,...

Определить, является ли число совершенным
помогите решить пожалуйста, через циклы 1. Ввести натуральное число N. Определить, является ли оно...

Выяснить, является ли число совершенным
Натуральное число называется совершенным, если оно равно сумме своих делителей, включая 1 и,...


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

Или воспользуйтесь поиском по форуму:
6
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2020, vBulletin Solutions, Inc.