Во входном файле будет два числа в диапазоне 1 ≤ n, m ‹ 100. Я должен отобразить m в степени n. Когда я использую функцию pow(x,y), она не может вычислить большие целые числа для ex ::: 12 в степени 23, обычно должно отображаться 6624737266949237011120128, но мой код отображает отрицательное число. Кто-нибудь может решить это упражнение?
N-я степень m для больших чисел
Ответы (3)
Это не очень сложно сделать без использования внешних библиотек. Сохраните цифры числа в векторе и умножьте цифру на цифру (как вы делаете это на бумаге).
Example:
power(12,23):
Store as start->1->2->end
step 1 result: start->1->4->4->end
step 2 result: start->1->7->2->8->end
and so on...
Можете ли вы показать исходный код? Для сохранения результата достаточно использовать double. Ниже приведен мой тестовый код для справки:
#include <iostream>
#include <cmath>
using namespace std;
int main (int argc, char *argv[])
{
double result = pow (12, 23);
cout.precision (26);
cout << "Result: " << result << endl;
}
bc
, либо даже python2
выводят другой результат: 369729637649726772[...]
, тогда как C++ выводит 369729637649726802[...]
.
- person Chnossos; 13.04.2014
Попробуйте сохранить свою базу в long double
перед вызовом pow :
long double base = 12;
long double result = pow(base, 23);
Однако это не требуется, начиная с C++11, вы можете получить хорошее приближение, как это:
#include <iomanip>
#include <iostream>
#include <cmath>
int main ()
{
std::cout << std::fixed << std::setprecision(0) << pow(99, 99) << std::endl;
}
Выход :
369729637649726802192985226395427290145296428445515959701359650120802601667133273280053721002700400354392780458116125965728631706472588849812738072765460822138161108630185181415759762204338929270784
Но это приблизительно, например, Python2
код print 99 ** 99
выводит это:
369729637649726772657187905628805440595668764281741102430259972423552570455277523421410650010128232727940978889548326540119429996769494359451621570193644014418071060667659301384999779999159200499899
Чтобы получить точный результат на C++, вам следует взглянуть на некоторые библиотеки BigInt.