Доброго времени суток, возникла следующая проблема: Нужно возвести в степень(n>30) число x. c++ я только начал изучать, не будьте слишком строги, но критика приветствуется.
#include "stdafx.h"
#include <iostream>
using namespace std;
int PowByValue(int x, int n)
{
int rez = 1;
char* rezchar = new char[];
if (n > 30)
{
int size = sizeof(rezchar) / sizeof((char));
rezchar[size] = { 1, 0, 7, 3, 7, 4, 1, 8, 2, 4 };
for (int j = 0; j <= sizeof(rezchar) / sizeof((char)); j++)
{
rez++; //функция не до конца написано, здесь предполагается, что
каждый
элемент
} //массива будет умножаться на x,и если больше 10, то след элемент +1
return rez;
}
for (int i = 1; i <= n; i++)
rez *= x;
return rez;
}
void PowByReference(int &x, int n)
{
int rez = 1;
for (int i = 1; i <= n; i++)
rez *= x;
x = rez;
}
int main()
{
int x = 2; int n = 30;
cout << PowByValue(x, n) << endl;
PowByReference(x, n);
cout << x;
system("pause");
return 0;
}
Не хочу тебя разочаровывать, но...
ты выводишь значение в int, которое может находиться в диапазоне -2^31...2^31, т.е. в 30 степень ты можешь возвести только число 2.
вторая ошибка - в функции ты выделяешь память и используешь массив rezchar
, но не очищаешь потом память, да и снаружи rezchar
нигде никак не используется (функция возвращает int)
Если ты хочешь использовать операции с БОЛЬШИМИ числами, то это делается так:
1) вместо int (2^32) используется массив unsigned int[size], который будет описывать большие числа (2^(size*32))
2) для этих БОЛЬШИХ чисел пишешь функции сложения, вычитания, умножения, деления (если не ограничиваться размером числа, то умножение скорее всего будет приводить к созданию нового числа/нового массива большего размера max_size3 = max_size1 * max_size2)
и вот после этого можно реализовать уже и функцию степени - можно топорно как многократное умножение, а можно пооптимальнее
вместо sizeof(rezchar)/sizeof(char) я бы вызвал strlen(rezchar), и вообше много лишнего и ошибок - лучше писать снова и использовать std::string функцию to_string, а лучше std::bitset, или std::valarray,
#include <stdio.h>
#include <math.h>
int main(int argc, char **argv){
double x= 2;
double n = 20;
double res = pow(x,n);
printf("%f^%f=%f\n",x,n,res);
return 0;
}
?
Кофе для программистов: как напиток влияет на продуктивность кодеров?
Рекламные вывески: как привлечь внимание и увеличить продажи
Стратегії та тренди в SMM - Технології, що формують майбутнє сьогодні
Выделенный сервер, что это, для чего нужен и какие характеристики важны?
Современные решения для бизнеса: как облачные и виртуальные технологии меняют рынок
У меня есть файл прошивки для контроллера в формате S19 (SREC)Как я понял внутри файла есть чексуммы
Есть кроссплатформенная программа заказчика под Window/OsX/Linux - C++/Qt/QmlС линуксами возникает проблема линковки Qt с openssl
Вопрос такой, есть QScrollArea с некоторым количеством кнопок на нейДля области установлен скролл через QScroller::grabGesture(viewport(), QScroller::TouchGesture); Как сделать,...
Пишу код на ардуино, раз в 1 мс подаю ток на нужный мне пин пусть это делает функция pin()