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

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

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

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 15.03.2013, 18:55   #1
Tatiana_91
Пользователь
 
Аватар для Tatiana_91
 
Регистрация: 03.02.2013
Сообщений: 15
Вопрос Возвести в степень за наименьшее число операций. С++

Дано натуральное число n. Требуется определить выражение, которое вычисляет x^n за наименьшее число операций. Разрешается использовать операции умножения и возведения в степень, круглые скобки. Умножение считается одной операцией. Пример: n=5, тогда требуется три операции (x*x)^2*x.
Объясните кто-нибудь как сделать, или, может у кого есть что-то похожее, поделитесь.
Tatiana_91 вне форума Ответить с цитированием
Старый 15.03.2013, 18:57   #2
s-andriano
Старожил
 
Аватар для s-andriano
 
Регистрация: 08.04.2012
Сообщений: 3,229
По умолчанию

Тогда в любом случае одна операция - возведение в степень.
s-andriano вне форума Ответить с цитированием
Старый 15.03.2013, 18:58   #3
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Разрешается использовать операции умножения
При таком условии можно использовать стандартную функцию возведения в степень из модуля math.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.03.2013, 19:06   #4
Tatiana_91
Пользователь
 
Аватар для Tatiana_91
 
Регистрация: 03.02.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
При таком условии можно использовать стандартную функцию возведения в степень из модуля math.
Не сказано про условия.
Tatiana_91 вне форума Ответить с цитированием
Старый 15.03.2013, 19:24   #5
Sciv
Старожил
 
Аватар для Sciv
 
Регистрация: 16.05.2012
Сообщений: 3,211
По умолчанию

Цитата:
Не сказано про условия.
Ну тогда некорректна задача, извините.
Начал решать проблему с помощью регулярных выражений. Теперь решаю две проблемы...
Sciv вне форума Ответить с цитированием
Старый 15.03.2013, 19:26   #6
Tatiana_91
Пользователь
 
Аватар для Tatiana_91
 
Регистрация: 03.02.2013
Сообщений: 15
По умолчанию

Цитата:
Сообщение от Sciv Посмотреть сообщение
Ну тогда некорректна задача, извините.
Умножение считается одной операцией, возведению в степень n соответствует (n-1) операция. Может это...
Tatiana_91 вне форума Ответить с цитированием
Старый 16.03.2013, 00:04   #7
interacia
Пользователь
 
Аватар для interacia
 
Регистрация: 24.01.2013
Сообщений: 67
По умолчанию

Кажется вам нужно что то вроде этого кода.
Данный код возводит 2 в 15-ую степень за 6 операций умножения.
А в 31-ую степень за 8 операций умножения.
Код:
#include <iostream.h>
int main(void)
{
system("chcp 1251 > nul"); // руский язык в консоли
int i,j; // счетчик цикла
int KOL_UMN; // Подсчет количества операций умножения
long double M[100];
long double Stepen;
double X,N;
KOL_UMN=0; // начальное значение счетчика операций
cout<<"Введите число X"<<endl;
cin>>X;
cout<<"Введите степень N"<<endl;
cin>>N;
i=1;
j=1;
Stepen=X;
M[1]=X;
while (i<=N-i)
{ j++; i+=i;
 M[j]=M[j-1]*M[j-1]; KOL_UMN++; // учет операции
}
Stepen=M[j];
N-=i;
while (N>=1){
i=1;
j=1;
while (i<N-i)
{
j++;
i+=i;
}
Stepen*=M[j]; KOL_UMN++; // учет операции
N-=i; }
cout<<"Ответ"<<endl;  // вывод результата
cout<<Stepen<<endl;  // вывод результата
cout<<"Количества операций умножения "<<KOL_UMN<<endl;  // вывод результата
system("PAUSE"); //пауза при выходе можно убрать
return 0;
}
interacia вне форума Ответить с цитированием
Старый 20.03.2013, 20:38   #8
Tatiana_91
Пользователь
 
Аватар для Tatiana_91
 
Регистрация: 03.02.2013
Сообщений: 15
Радость

Цитата:
Сообщение от interacia Посмотреть сообщение
Кажется вам нужно что то вроде этого кода.
Данный код возводит 2 в 15-ую степень за 6 операций умножения.
Спасибо! Но вот мое решение, вдруг кому понадобится.
Код:
//----------------------------------------------------------------
#include <iostream.h>
#include<map.h>
#include<math.h>
#include <conio.h>
#include <time.h>
#include <string.h>
#include <stdlib.h>
#include <stdio.h>
#include <sstream>
#pragma hdrstop
#include <vcl.h>
//---------------------------------------------------------------
int step(int x)
{
  int i, b;
  long c=0;
  for(i=0; x>0; i++)
     {
      b=x%2;
      x=(x-b)/2;
      c+=b * pow(10,i);
     }
 return c;
} ;
//-----------------------------------------------------------------------
int main()
{
 int e, d;
 const m = 100;
 cout<<"Vvedite chislo operacii: ";
 cin>>e;
d = step(e);
int m1;
m1 = log10(d)+1;
int mas[m];
int i=0;
  while (i < m1)
      {
       mas[i]=d%10;
       d/=10;
       i++;
      }
int j = m1-1;
 while (j >= 0)
     {
   //   cout<<mas[j]<<" ";
      j--;
     }
 cout<<endl;
 int x;
 int k;
 k = mas[0];
 string str;
ostringstream stream;
stream << k;
str ="(x^" + stream.str()+ ")^2";
string str1;
int i1=1;
while (i1 < (m1-1))
     {
      ostringstream stream;   //преобразование дробных и целых чисел
      k = mas[i1];
      stream << k;
      str1="(" + str + "*x^" + stream.str() + ")^2";
      i1++;
     }
k = mas[m1-1];
stream << k;
str = "(" + str1 + "*x^1)";// + stream.str()+"1)";
cout<<str;

getch();
return 0;
}
//------------------------------------------------------------------------
Tatiana_91 вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
как возвести число в степень 2^3 yura_zb Assembler - Ассемблер (FASM, MASM, WASM, NASM, GoASM, Gas, RosAsm, HLA) и не рекомендуем TASM 3 19.10.2012 08:49
В матрице nxm определить в каждом столбце минимальное и максимальное элемент число, возвести в степень. Рекурсия (на Паскаль абс) BArt2000 Паскаль, Turbo Pascal, PascalABC.NET 1 03.04.2012 08:32
возвести число x в степень y Imbire Паскаль, Turbo Pascal, PascalABC.NET 6 31.10.2011 09:40
Как возвести число в степень? Wintrymoon Паскаль, Turbo Pascal, PascalABC.NET 36 09.05.2011 15:11
Возвести в степень b некоторое число a Михаил70 Общие вопросы Delphi 3 09.09.2009 16:10