Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 679
#1

Возведение в степень (результат всегда = 0) - C++

12.12.2013, 18:42. Просмотров 1181. Ответов 21
Метки нет (Все метки)

Привет всем. Люди, помогите с задачей. Я новичок, учусь в универе. Понимаю, что задача элементарная, но не могу понять одного. Нужно возвести число a в степень k.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#include <stdio.h>
#include <conio.h>
#include <math.h>
 
double long a;
int T, count, k;
 
int main()
{
    scanf("%d", &T);
 
    for(count = 1; count <= T; count++){
        scanf("%d%d", &a, &k);
        printf("%d\n", pow(a,k));
    }
 
    getch();
 
    return 0;
}
T - тестовые случаи. Без них не примут решение. При каждом возведении в степень выдает 0. Скажите, где моя ошибка?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
12.12.2013, 18:42
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Возведение в степень (результат всегда = 0) (C++):

Возведение степень - C++
int n=2; float i; i=pow(((n-1)/(n+1)), n*(n-1)); Выдает ошибку Domain Error. В чем дело и есть ли альтернатива pow() ?

Возведение в степень - C++
Подскажите, как написать программу возведения 2-ки в миллионную степень и вывести результат на экран. #include &lt;stdio.h&gt; #include...

возведение в степень - C++
Всем привет кто обитает на сеем форуме)) учу с++ столкнулся с проблемой, не могу написать программу которая возводит введённое с...

Возведение в степень - C++
Здравствуйте! Есть какой то другой способ возведения в степень чем а^3 = а*а*а А если нужно в 100 степень возводить то умереть и не...

Возведение в степень - C++
Совсем недавно начал изучать C++. Учу по книге. Было задание: Вводишь число Вводишь степень в которую надо возвести это число ...

Возведение в степень - C++
Срочно, помогите записать выражение cos^4(x)

21
genaryok
22 / 22 / 4
Регистрация: 18.10.2013
Сообщений: 62
13.12.2013, 18:35 #16
Цитата Сообщение от ValeryS Посмотреть сообщение
попробуй словами описать что делает эта функция

а что числа в компьютере лежат не в двоичном формате?

проверяем
32
простой способ
3*3 одно действие 6-12 тактов процессора
твой алгоритм

3!=0 истина ветвление

3%2=1 деление с остатком 40 тактов ( здесь правда это будет 3&1 один такт) плюс ветвление

1*3 r=3умножение 6-12 тактов процессора

3*3 x=9 умножение 6-12 тактов процессора

3/2=1 n=1 деление около 40 тактов( здесь правда будет сдвиг 1 такт)

1!=0 истина ветвление

1%2=1 деление с остатком 40 тактов ( здесь правда это будет 1&1 один такт) плюс ветвление

3*9 r= 27 умножение 6-12 тактов процессора

9*9 x=81 умножение 6-12 тактов процессора

1/2=0 деление около 40 тактов( здесь правда будет сдвиг 1 такт)

0!=0 ложь -выход ветвление

итого гораздо медленней
плюс неправильный результат
может на больших числах и будет выигрыш, если подправишь свой алгоритм
и заменишь n=n / 2; на сдвиг вправо
а n % 2 на n&0x01
не все компиляторы деление на степень двойки переводят в сдвиг
Не буду спорить, алгоритм может и действительно медленнее других, но как вариант)
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,242
13.12.2013, 19:29 #17
Цитата Сообщение от genaryok Посмотреть сообщение
Не буду спорить, алгоритм может и действительно медленнее других,
а зря
нужно уметь отстаивать свою точку зрения
при больших n он действительно быстрее
например n 64 в классическом 64 итерации а в твоем 6
при больших правда результат в int не влезет даже в long
я переписал твой код избавился от ветвления и переименовал
а то в твоем имени читается "шаг"
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
long MyPow(int x,int n)  
{
  long int r=1;
  int m;
  while  (n)
   {
   m=n&0x01
    r=(r*x*m)+(r*(!m));
    x*=x;
     n=n>>1 ;
    }
   return r;
 }
0
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 679
13.12.2013, 19:35  [ТС] #18
Я просто попробовал решить задачу с помощью определения функции. Не получилось.
Вот короче моя задача:

Для заданного целого а и натурального k вычислить a^k.
Input

В первой строке записано количество Т тестов. В каждой из последующих Т строк записаны два числа, разделенных пробелом: a и k (-32000 < a ≤ 32000, 0 < k ≤ 32000).
Output

Для каждого тестового случая вывести в отдельную строку единственное число a^k. Гарантируется, что ответ не превосходит по модулю 2^61-1
Примеры
Входные данные

2
1 1
2 3

Результат работы

1
8

Капец, я не думал, что на простой степени так застопорюсь.
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,242
13.12.2013, 19:37 #19
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Капец, я не думал, что на простой степени так застопорюсь.
в чем?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
Не получилось.
почему?
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
1 1
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
1
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
2 3
Цитата Сообщение от Sh@dow777 Посмотреть сообщение
8
а сколько, по вашему,
11 и 23
0
cpp_job
4 / 4 / 1
Регистрация: 25.11.2013
Сообщений: 108
13.12.2013, 19:51 #20
Шилдт в помощь Собственно студенты кроме лекций любят почитать книги о программировании, или они им неинтересные?
Собственно кодес
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
class pwr {
  double b;
  int e;
  double val;
public:
  pwr(double base, int exp);
  double get_pwr() { return val; }
};
 
pwr::pwr(double base, int exp)
{
  b = base;
  e = exp;
  val = 1;
  if(exp==0) return;
  for( ; exp>0; exp--) val = val * b;
}
 
int main()
{
  pwr x(4.0, 2), y(2.5, 1), z(5.7, 0);
 
  cout << x.get_pwr() << " ";
  cout << y.get_pwr() << " ";
  cout << z.get_pwr() << "\n";
 
  return 0;
}
(с) Г.Шилдт

Добавлено через 1 минуту
Правда там, класс...
0
ValeryS
Модератор
6729 / 5138 / 484
Регистрация: 14.02.2011
Сообщений: 17,242
13.12.2013, 21:29 #21
хоть это и Шилдт, но косячки тоже есть
а может он специально их оставил?
Цитата Сообщение от cpp_job Посмотреть сообщение
int exp
exp слово зарезервированное
функция из math.h вычисление экспоненты.
Цитата Сообщение от cpp_job Посмотреть сообщение
if(exp==0) return;
абсолютно бесполезная строка
без неё так же будет работать
0
Sh@dow777
12 / 12 / 3
Регистрация: 10.12.2013
Сообщений: 679
13.12.2013, 21:47  [ТС] #22
Цитата Сообщение от ValeryS Посмотреть сообщение
в чем?
почему?






а сколько, по вашему,
11 и 23
Это так должно получиться. Это не мои результаты.

Добавлено через 13 минут
Цитата Сообщение от cpp_job Посмотреть сообщение
Шилдт в помощь Собственно студенты кроме лекций любят почитать книги о программировании, или они им неинтересные?
Собственно кодес
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
#include <iostream>
using namespace std;
 
class pwr {
  double b;
  int e;
  double val;
public:
  pwr(double base, int exp);
  double get_pwr() { return val; }
};   
 
pwr::pwr(double base, int exp)
{
  b = base;
  e = exp;
  val = 1;
  if(exp==0) return;
  for( ; exp>0; exp--) val = val * b;
}
 
int main()
{
  pwr x(4.0, 2), y(2.5, 1), z(5.7, 0);
 
  cout << x.get_pwr() << " ";
  cout << y.get_pwr() << " ";
  cout << z.get_pwr() << "\n";
 
  return 0;
}
(с) Г.Шилдт

Добавлено через 1 минуту
Правда там, класс...
У меня такие обстоятельства, что я не хожу в универ. Учусь на дому. Поэтому только и делаю, что книги читаю.
0
13.12.2013, 21:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
13.12.2013, 21:47
Привет! Вот еще темы с ответами:

Возведение в степень - C++
Дано число n и его нужно возвести в степень s. Можно ли это как-то сделать не используя циклы. Заранее спасибо...

Возведение в степень - C++
напишите программный код для С++ Builder

возведение в степень - C++
помогите плиз! в файле есть задачка. нужно рекурсивно возвести в степень. Код: #include &lt;iostream&gt; float stepen(float a, int n) { ...

Возведение a в степень b - C++
Пользователь вводит числа а и b, программа считает &quot;а&quot; в степени &quot;b&quot;. Помогите написать код


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
22
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.