С Новым годом! Форум программистов, компьютерный форум, киберфорум
Наши страницы

Рекурсия, совершенные числа - C++

Войти
Регистрация
Восстановить пароль
Другие темы раздела
C++ Как записать структуру в файл с помощью fstream? http://www.cyberforum.ru/cpp-beginners/thread544620.html
доброго времени суток, нужна ваша помощ. припустим у нас есть структура: struct group { char name; int k; }st; как ейо записать и считать з потока fstream..
C++ Чтение данных из строки заданного вида Входной файл содержит строки с постановками задач вида:N=4, S=3, R: 2, 3, 1 N=9, S=4, R: 5, 3.2, 8, 5.5Каким образом можно занести числа в переменные N, S и массив R? http://www.cyberforum.ru/cpp-beginners/thread544617.html
C++ Добрый вечер!!! Не могу из DataGridView SaveFileDialog'ом сохранить данные в базу...
Добрый вечер!!! Не могу из DataGridView с помощью SaveFileDialog сохранить данные в базу. При загрузке формы данные загружаются нормально, при открытии БД OpenSaveDialog'ом тоже открывает корректно....
Переписать с Паскаля в с++ C++
Помогите пожалуйста - переделать программу на с++ с использованием структур - очень прошу всех откликнуться... type student=record imy:string; fam:string; otch:string; first:byte; second:byte;...
C++ Графика winBGI в среде программирования dev-c++ http://www.cyberforum.ru/cpp-beginners/thread544577.html
Есть ли стандартная функция, которая позволила бы вставить картинку? И если можно подскажите какую-нибудь литературу по графике winBGI на русском языке
C++ Стек и очередь; хеш-таблица (помогите) Разработать подпрограммы, которые обеспечивают запросы на запись или чтение данных из очереди, стека или дека. Для организации указанных структур использовать массивы или списки. Проверить... подробнее

Показать сообщение отдельно
Neys
-1 / 0 / 0
Регистрация: 27.10.2009
Сообщений: 14

Рекурсия, совершенные числа - C++

11.04.2012, 16:12. Просмотров 1224. Ответов 4
Метки (Все метки)

Добрый вечер. Столкнулся с проблемой написания рекурсивной функции для определения, совершенное число или нет.
Попробовал сделать так, для первых четырех чисел проверенно работает, но принцип работы -"не есть хорошо".
Для того же числа 28 что выходит: ищу делители от 28/2 = 14 до 1, как только нахожу (а 14 и есть один из таковых), считаю уже от половины делителя до той же двойки. Понятно, что при нахождении делителя 7 и делении его пополам будем считать по убыванию от (int)3.5. Как находится четверка - для меня секрет. Возможно, она кроется в "невидимых" для меня и ненужных по сути шагах рекурсии. Таковых в этом коде много, насколько я понимаю.

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
#include <iostream>
 
using namespace std;
 
bool is_perfect(int num, int lim)
{
    int sum = 0;
    for(int i = lim; i >= 1; i--)
        if(num % i == 0)
        {
            sum += i; 
            is_perfect(num, lim / 2);
        }
    return sum == num;   
}
 
void main()
{
    setlocale(0, "");
    int number;
    cout << "Введите число: ";
    cin >> number;
    if(is_perfect(number, number / 2))
        cout << "Число совершенное." << endl;
    else
        cout << "Число совершенным не является." << endl;
}
ВОПРОС: Как можно красиво решить данную задачу? Придумать бы хотя бы алгоритм.

Добавлено через 19 часов 40 минут
P.S. Тупанул с названием темы. Естественно, совершенные числа, а не случайные.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
 
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.