2^n算法

时间:2023-03-09 23:08:33
2^n算法

题目描述:

如题……

那么,可以用c++自带快速幂:pow:

#include<cstdio>
using namespace std;
int n;
int main()
{
scanf("%d",&n);
printf("%d",pow(,n));
return ;
}

也可以用手写的快速幂,这里就不给了。

但是有的时候用的时候会出现超内存的情况,所以建议尽量不要用这样的自带函数(小水题就算了),写一个正版的(高精度+STL):

#include <iostream>
#include <vector>
#include <fstream>
int N;
using namespace std;
int main()
{
scanf("%d",&N);
vector<int> result;
result.push_back();
vector<int>::iterator it;
for (int i = ; i <= N; i++)
{
for (it = result.begin(); it != result.end(); it++)
{
*it = (*it) * ;
}
for (size_t i = ; i < result.size(); i++)
{
if (result[i] > )
{
if (i == result.size() - )
{
result.push_back(result[i] / );
}
else
{
result[i + ] += result[i] / ;
}
result[i] %= ;
}
}
}
ofstream out;
out.open("result.txt", ios::out | ios::trunc);
if (!out.is_open())
{
cout << "open error";
return -;
}
for (int i = result.size() - ; i > -; i--)//???????????
{
out << result[i];
cout << result[i];
}
out.close();
cout << endl;
system("pause");
return ;
}

这里有一个#include < fstream > 不用管它,这个是输出一个文本而已,删了也行(跟freopen差不多,因为提交要求而添加的)。