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

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 19, средняя оценка - 4.89
Mr Twix
0 / 0 / 0
Регистрация: 11.01.2012
Сообщений: 6
#1

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

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

Составьте программу,которая проверяет,является ли натуральное число,введенное с клавиатуры совершенным.
Нужна помощь, если кто сталкивался с такой задачей напишите пожайлуста!
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
11.01.2012, 12:02
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Является ли натуральное число совершенным. С++. (C++):

Проверить, является ли заданное натуральное число совершенным - C++
#include <iostream> #include <conio.h> using namespace std; int main(); { setlocale (LC_ALL,"Russian"); cout « " Задача №\n"; ...

Проверить, является ли заданное натуральное число совершенным - C++
#include <iostream> #include <conio.h> using namespace std; int main(); { setlocale (LC_ALL,"Russian"); int n; int sum=0; ...

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

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

Определить, является ли заданное натуральное число совершенным - C++
Определить, является ли заданное натуральное число совершенным, т.е. равным сумме всех своих (положительных) делителей, кроме самого этого...

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

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
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;
}
yuraiow
Сообщений: n/a
26.04.2013, 13:45 #3
silent_1991, а не подскажешь как реализовать эту программу при помощи классов?
Tulosba
:)
Эксперт С++
4393 / 3236 / 297
Регистрация: 19.02.2013
Сообщений: 9,045
26.04.2013, 14:16 #4
yuraiow, тут в класс оборачивать нечего. Одна функция проверки.
yuraiow
Сообщений: n/a
26.04.2013, 14:20 #5
Tulosba, нет, надо объявить в класс натуральное число
silent_1991
Эксперт С++
4963 / 3039 / 149
Регистрация: 11.11.2009
Сообщений: 7,027
Завершенные тесты: 1
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);
};
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
26.04.2013, 14:30
Привет! Вот еще темы с ответами:

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

Функция определяющая является ли число совершенным - C++
Говорят, что целое число является совершенным числом, если его сомножители, включая 1 (но не само число) в сумме дают это число....

Определить, является ли заданное число совершенным - C++
По заданному натуральному число 2&lt;=N&lt;=10^9 требуется определить, является ли оно совершенным.(Число называется совершенным, если оно равно...

Функции пользователя: определение, является ли число совершенным - C++
Говорят, что целое число является совершенным числом, если его сомножители, включая 1 (но не само число) в сумме дают это число....


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
26.04.2013, 14:30
Ответ Создать тему
Опции темы

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