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

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

Вернуться   Форум программистов > IT форум > Помощь студентам
Регистрация

Восстановить пароль

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

Ответ
 
Опции темы Поиск в этой теме
Старый 12.11.2011, 15:32   #1
3dg_fan
Пользователь
 
Аватар для 3dg_fan
 
Регистрация: 25.12.2010
Сообщений: 38
По умолчанию Разложение Кантора (Cantor expansion)

Всем привет, прошу помочь вот в такой задаче: дано положительное число, нужно разложить его по методу Кантора (точно не знаю как по-русски, на англ. Cantor expansion)..
например
10,000,000 = 0*1! + 2*2! + 2*3! + 1*4! + 5*5! + 0*6! + 0*7! + 5*8! + 7*9! + 2*10!.
в общем случае х = n! + a_(n-1) (n-1)! + …: + a_2 2! + a_1 .
по алгоритму начала писать так:
Код:
#include <iostream>
using namespace std;
	int main()
	{
		int x,an;
		cin>>x;
		int n=1;
		int y = x;//y is a temporary variable used so that this 
				//procedure won't destroy the original value of x
	     while(y!=0)
	     {
	     	an % (n+1) = y;// an=y*mod(n+1);
	     	y=(y-an) / (n+1);
	     	n= n+1;
	     }
	}
вот.. собсно что делать дальше) буду благодарна за любую помощь)
3dg_fan вне форума Ответить с цитированием
Старый 12.11.2011, 16:22   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,829
По умолчанию

у вас этот код компилится?

буквально по второй ссылке в гугле есть готовый код на паскале....

Последний раз редактировалось p51x; 12.11.2011 в 16:26.
p51x вне форума Ответить с цитированием
Старый 12.11.2011, 16:34   #3
val_nnm
Форумчанин
 
Регистрация: 18.10.2009
Сообщений: 185
По умолчанию

На вскидку: замените
Код:
an % (n+1) = y;
на
Код:
an = y%(n+1);
На С# пишу лучше чем на русском.
"У меня правильнописание хромает. Оно хорошее, но почему-то хромает."
val_nnm вне форума Ответить с цитированием
Старый 12.11.2011, 19:04   #4
3dg_fan
Пользователь
 
Аватар для 3dg_fan
 
Регистрация: 25.12.2010
Сообщений: 38
По умолчанию

посмотрела алгоритм на паскале ..и вот:

Код:
#include <iostream>
using namespace std;
	int factorial(int n)
	{
	     if (n==1)
  			return 1;
		
		return factorial(n-1)*n; 
	}
	int cantor_expansion(int x)
	{
		int an;
		int n=1;
		int y = x;
		int result=0;
	     while(y!=0)
	     {
	     	an =y % (n+1);// an=y*mod(n+1);
	     	y=(y-an) / (n+1);
	     	n= n+1;
	        while(n!=1){
	          result = an*factorial(n);
               n--;
             }  
	     }
	     return result;
	     
	}
	int main()
	{
		int x;
		cin>>x;
		cout<<cantor_expansion(x);
    	}
я конеш понимаю что хранить это все дело в int result не правильно) а если в массиве? то у него какой размер будет? И потом нужно ведь хранить числа и факториал отдельно..
3dg_fan вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Разложение Avicenna Помощь студентам 2 24.10.2011 08:31
разложение матрицы Monomah Помощь студентам 2 28.02.2011 19:47
Разложение функции stepanov_ivan Помощь студентам 0 25.10.2010 09:08
Рекурсивная программа в Dephi:множество кантора Katya_Pesec Помощь студентам 0 12.06.2010 21:11
Разложение числа на слагаемые Oleg-vp Общие вопросы Delphi 5 30.10.2007 10:43