С++ -как и практически любой другой язык с С-подобным синтаксисом - принципиально не годится для доказательства правильности: все эти языки целиком построены на побочных эффектах.
Хочешь доказывать правильность императивного кода - бери Pascal (классический виртовский, а не Delphi или ABC.Net), Modula-2, CLU, Ada, Oberon...
Сам же алгоритм тривиален (в данном случае число вводится в десятичной записи, но обрабатывается как пятеричное - суть алгоритма от этого не меняется):
cin >> x;
mask = 1; // маска для выделения правой части числа
flg = false; // Флаг "совершенное число"
// Цикл по правым частям числа (1 цифра, 2 цифры, ..n цифр)
while (x / mask != 0 && !flg) {
// Получаем очередную правую часть числа
mask *= 5;
cur = x % mask;
// Считаем сумму множителей текущей правой части
sum = 0;
for(i = 1; i < cur; ++i) { if (cur % i == 0) { sum += i; } }
// Проверяем на совершенность
flg = sum == x;
}
cout << (flg? "да" : "нет");
P.S. Дело не в моде, а в том, что доказательство правильности резко увеличивает стоимость разработки (в том числе и тем, что требует иного, чем бездумное применение паттернов, уровня образования). Потому имеет смысл только для критически важных вещей.
Другие языки программирования и технологии
Очень сложная задача, прошу помощи знающих
Не. Это лет 20 назад было модно. Сейчас мода другая
Похожие вопросы
- Кто знает очень сложные задачи по информатике, для программы Паскаль?? ? Напишите несколько задач...
- C++ char arrays - прошу помощи с задачей.
- Посоветуйте сайт для решения сложных задач по программированию, тоесть хочу научится решать сложные задачи, что читать?
- Помогите пожалуйста найти ошибку в решении задачи по информатике(паскаль) !!!Прошу очень нужно!!!задача простая!!!
- Интересная, но сложная задача.
- Решить задачу с помощью последовательного и двоичного поиска.
- Ситуация такая: В фотошопе сделал очень сложное выделение
- Какой программой сделать такой логотип, чтоб не очень сложная была и на русском. СПАСИБО!!!
- Вводится последовательность чисел, 0 – конец последовательности. Найти два наибольших числа (VB) прошу помощи
- Сложная задача по C++.нЕ ДЛЯ НОВИЧКОВ. Блок схему кто сможет или решение