Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 27.12.2012, 14:30   #1
Ruslan_CR7
Новичок
Джуниор
 
Регистрация: 27.12.2012
Сообщений: 6
По умолчанию Программа по С++

Натуральное число, в записи которого n цифр, называется числом Амстронга, если сумма его цифр, возведенная в степень n равна самому числу. Найти все эти числа от 1 до k.

До завтра, помогите пожалуйста. =)
Ruslan_CR7 вне форума Ответить с цитированием
Старый 27.12.2012, 14:42   #2
sVasilich
Форумчанин
 
Аватар для sVasilich
 
Регистрация: 16.12.2009
Сообщений: 224
По умолчанию

Код:
обнулить счётчик
в цикле i = от 1 до k с шагом 1
  подсчитать сумму цифр в i ;
  возвести её в степень n;
  сравнить полученное число с текущим i;
  если да,
    нарастить счётчик на единицу;
конец цикла;
показать, что насчиталось в счётчике.
как-то так.
Люди бывают 10 типов: те, кто понимают двоичную систему счисления, и те, кто не понимают...
sVasilich вне форума Ответить с цитированием
Старый 27.12.2012, 15:07   #3
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

Ruslan_CR7

Найти все эти числа от 1 до k.

Ввод k сделай сам :D

Код:
#include <iostream>
#include <locale>
#include <iterator>

#include <math.h>
#include <boost/range/counting_range.hpp>
#include <boost/range/algorithm/copy.hpp>
#include <boost/range/adaptor/filtered.hpp>

using namespace boost::adaptors;

struct armstrong
{
   template <typename T>
   bool operator()(T val1) const
   {
	T val(val1); T d=0,s=0;
	for (;val;val /=10, d++); val=val1;
	for (;val;val /=10) s+=pow(val%10,d);
	return val1 == s;
   }
};

template <typename T>
void print(T n)
{
	typedef boost::counting_iterator<T> I;
	typedef std::ostream_iterator<const T> O;

	boost::copy(boost::make_iterator_range(I(0), I(++n)) | filtered(armstrong()), O(std::cout, " "));
}

int main()
{
	setlocale(LC_ALL, "");
	print(100000);

	return 0;
}
Пример работы программы: http://liveworkspace.org/code/1GYZVI$1
Rififi вне форума Ответить с цитированием
Старый 27.12.2012, 15:25   #4
EUGY
Форумчанин
 
Аватар для EUGY
 
Регистрация: 11.07.2010
Сообщений: 914
По умолчанию

Как оказалось, число Армстронга совсем не то, что сформулировано у ТС.
Цитата:
ТС: Натуральное число, в записи которого n цифр, называется числом Амстронга, если сумма его цифр, возведенная в степень n равна самому числу.
Цитата:
WIKI: натуральное число, которое в данной системе счисления равно сумме своих цифр, возведённых в степень, равную количеству его цифр.

Последний раз редактировалось EUGY; 27.12.2012 в 15:51. Причина: неверная формулировка условия
EUGY вне форума Ответить с цитированием
Старый 27.12.2012, 15:35   #5
AcTiV
Пользователь
 
Регистрация: 25.12.2012
Сообщений: 40
По умолчанию

Цитата:
Сообщение от sVasilich Посмотреть сообщение
Код:
обнулить счётчик
в цикле i = от 1 до k с шагом 1
  подсчитать сумму цифр в i ;
  возвести её в степень n;
  сравнить полученное число с текущим i;
  если да,
    нарастить счётчик на единицу;
конец цикла;
показать, что насчиталось в счётчике.
как-то так.
вы хорошо пишете на псевдокоде )
AcTiV вне форума Ответить с цитированием
Старый 27.12.2012, 16:11   #6
Ruslan_CR7
Новичок
Джуниор
 
Регистрация: 27.12.2012
Сообщений: 6
По умолчанию

Цитата:
Сообщение от Rififi Посмотреть сообщение
Ruslan_CR7

Найти все эти числа от 1 до k.

Ввод k сделай сам :D

Код:
#include <iostream>
#include <locale>
#include <iterator>

#include <math.h>
#include <boost/range/counting_range.hpp>
#include <boost/range/algorithm/copy.hpp>
#include <boost/range/adaptor/filtered.hpp>

using namespace boost::adaptors;

struct armstrong
{
   template <typename T>
   bool operator()(T val1) const
   {
	T val(val1); T d=0,s=0;
	for (;val;val /=10, d++); val=val1;
	for (;val;val /=10) s+=pow(val%10,d);
	return val1 == s;
   }
};

template <typename T>
void print(T n)
{
	typedef boost::counting_iterator<T> I;
	typedef std::ostream_iterator<const T> O;

	boost::copy(boost::make_iterator_range(I(0), I(++n)) | filtered(armstrong()), O(std::cout, " "));
}

int main()
{
	setlocale(LC_ALL, "");
	print(100000);

	return 0;
}
Пример работы программы: http://liveworkspace.org/code/1GYZVI$1
У нас вообще не так записывается программный код
Ruslan_CR7 вне форума Ответить с цитированием
Старый 27.12.2012, 16:12   #7
Ruslan_CR7
Новичок
Джуниор
 
Регистрация: 27.12.2012
Сообщений: 6
По умолчанию

BORLAND TURBO C++ PROFESSIONAL 2006
Ruslan_CR7 вне форума Ответить с цитированием
Старый 27.12.2012, 16:16   #8
Ruslan_CR7
Новичок
Джуниор
 
Регистрация: 27.12.2012
Сообщений: 6
По умолчанию

[spoiler][/spoiler]

Последний раз редактировалось Ruslan_CR7; 27.12.2012 в 16:18.
Ruslan_CR7 вне форума Ответить с цитированием
Старый 27.12.2012, 16:19   #9
Ruslan_CR7
Новичок
Джуниор
 
Регистрация: 27.12.2012
Сообщений: 6
По умолчанию

Блин, ссори, как под спойлер запихнуть?
Ruslan_CR7 вне форума Ответить с цитированием
Старый 27.12.2012, 17:11   #10
Izobara
Форумчанин
 
Аватар для Izobara
 
Регистрация: 26.12.2012
Сообщений: 227
По умолчанию

Ну так чем это тебе не С++? Полосочки сам расставь
"I believe I can fly" - C++, "What do you want from me" - Delphi, "Yesterday" - Pascal, "Let it be" - C#... Программисты-музыканты-полиглоты поймут
Izobara вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Программа на Pascal в Lazarus и программа для одномерного массива целых чисел Yegorka Lazarus, Free Pascal, CodeTyphon 13 20.12.2012 18:02
Программа как программа. вопрос leonidsm Общие вопросы C/C++ 5 02.10.2012 21:30
Программа с применением записей и программа с применение множеств smert99 Помощь студентам 0 16.06.2011 23:14
Программа открыается если есть другая программа. bookkc Паскаль, Turbo Pascal, PascalABC.NET 12 14.10.2009 20:09