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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 19.05.2009, 00:04   #1
edise
Новичок
Джуниор
 
Регистрация: 12.05.2009
Сообщений: 2
Вопрос помогите!

нужно вычислить N^N, где N>=10
при вводе чисел больше 15 прога вылетает, как объяснили знакомые нужно чтобы ответ являлся массивом цифр, но как это сделать ума не приложу...
edise вне форума Ответить с цитированием
Старый 19.05.2009, 00:11   #2
Sazary
В тени
Старожил
 
Аватар для Sazary
 
Регистрация: 19.12.2008
Сообщений: 5,788
По умолчанию

Почитайте про длинную арифметику.
Тут, например.
http://algolist.manual.ru/maths/longnum.php
Вполне очевидно, чтобы что-то понять, необходимо книги читать.
Не нужно плодить бессмысленных тем. Вас Поиск избавит от многих проблем.

___________________________________ ___________________________________ _______
[=Правила форума=]_____[Поиск]_____[Литература по С++]____[Литература. Паскаль]
Sazary вне форума Ответить с цитированием
Старый 19.05.2009, 00:17   #3
Ozerich
Студент 1 курса
Форумчанин Подтвердите свой е-майл
 
Аватар для Ozerich
 
Регистрация: 27.06.2008
Сообщений: 959
По умолчанию

Объявляешь 2 массива.
Представляешь число как массив.(1 элемент=1 цифра).
И потом в столбик высчитываешь.

Код:
vector<int>mn(vector<int>a,int b)
{
	vector<int>res(a.size());
	int cur,ost=0;
	for(int i=a.size()-1;i>=0;i--)
	{
		cur=a[i]*b+ost;
		if(cur>9)
		{
			ost=cur/10;
			cur%=10;
		}
		else ost=0;
		res[i]=cur;
		if((i==0)&&(ost>0))res.insert(res.begin(),ost);
	}
	return res;
}

vector<int>sum(vector<int>a,vector<int>b)
{
	if(a.size()>b.size())b.insert(b.begin(),a.size()-b.size(),0);
	else a.insert(a.begin(),b.size()-a.size(),0);
	vector<int>res(a.size());
	int cur,ost=0;
	for(int i=b.size()-1;i>=0;i--)
	{
		cur=a[i]+b[i]+ost;
		if(cur>9)
		{
			ost=1;
			cur%=10;
		}
		else ost=0;
		res[i]=cur;
		if((i==0)&&(ost==1))res.insert(res.begin(),1);
	}
	return res;	
}

vector<int>mnoz(vector<int>a,vector<int>b)
{
	int j;
	vector<int>res;res.push_back(0);
	for(int i=b.size()-1;i>=0;i--)
	{
		vector<int>m=mn(a,b[i]);
		for(j=0;j<b.size()-i-1;j++)m.push_back(0);
		res=sum(res,m);
	}
	return res;
}


vector<int>rec(vector<int>ch,int st)
{
    vector<int>odin;odin.push_back(1);
	if(st==0)return odin;
	if(st%2==0)return rec(mnoz(ch,ch),st/2);
	else return mnoz(ch,rec(mnoz(ch,ch),st/2));
}
Rec-Возведение числа ch в степень st
mnoz-умножение массив a на массив b
sum-сложение массива а с массивом b
mn-умножение массива на однозначное число

Вызов:
Код:
vector<int>a;
a.push_back(n);
vector<int>otvet=rec(a,n);
for(int i=0;i<otvet.size();i++)
cout<<otvet[i];
C++(STL, QT, WinInet) / DHTML(CSS) / JavaScript / PHP Developer

Последний раз редактировалось Ozerich; 19.05.2009 в 00:23.
Ozerich вне форума Ответить с цитированием
Ответ


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