Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- #include <algorithm>
- #include <vector>
- #include <cstring>
- #include <deque>
- #include <time.h>
- #include <stack>
- #include <stdio.h>
- #include <map>
- #include <set>
- #include <string>
- #define mp make_pair
- #define pb push_back
- #define PI 3.14159265358979323846
- #define MOD 1000000007
- typedef long long ll;
- using namespace std;
- ll n,i,j,d,x,k,y,m,l,r,sum,b[1005],rez;
- struct BigInt
- {
- vector <int> digits;
- BigInt operator + (BigInt a)
- {
- int n = max(a.digits.size(),digits.size());
- int i;
- for (i = 0; i < n; i++)
- {
- if (i > a.digits.size()-1)
- a.digits.push_back(0);
- else
- if (i > digits.size()-1)
- digits.push_back(0);
- }
- BigInt c;
- for (i = 0; i < n; i++)
- c.digits.push_back(a.digits[i]+digits[i]);
- for (i = 0; i < n-1; i++)
- {
- c.digits[i+1] += (c.digits[i])/10;
- c.digits[i] %= 10;
- }
- if (c.digits[n-1] >= 10)
- {
- c.digits.push_back(1);
- c.digits[n-1] %= 10;
- }
- return c;
- }
- friend ostream& operator << (ostream& rak, BigInt& a)
- {
- int i;
- for (i = a.digits.size() - 1; i >= 0; i--)
- rak << a.digits[i];
- }
- BigInt operator * (BigInt a)
- {
- int n = a.digits.size() + digits.size() - 1;
- int i,j;
- BigInt c;
- for (i = 0; i < n; i++)
- c.digits.push_back(0);
- for (i = 0; i < digits.size(); i++)
- for (j = 0; j < a.digits.size(); j++)
- c.digits[i+j] += digits[i]*a.digits[j];
- for (i = 0; i < n-1; i++)
- {
- c.digits[i+1] += (c.digits[i])/10;
- c.digits[i] %= 10;
- }
- if (c.digits[n-1] >= 10)
- {
- c.digits.push_back((c.digits[n-1])/10);
- c.digits[n-1] %= 10;
- }
- return c;
- }
- BigInt()
- {
- digits.clear();
- }
- BigInt(long long x)
- {
- while (x)
- {
- digits.push_back(x%10);
- x/=10;
- }
- }
- BigInt(string x)
- {
- for (int i = x.size() - 1; i >= 0; i--)
- {
- digits.push_back(x[i]-'0');
- }
- }
- };
- BigInt binpow(BigInt a, int x)
- {
- BigInt tmp;
- tmp.digits.push_back(1);
- if (x == 0)
- return tmp;
- if (x%2 == 0)
- {
- tmp = binpow(a,x/2);
- tmp = tmp*tmp;
- return tmp;
- } else
- {
- tmp = binpow(a,x/2);
- tmp = tmp*tmp;
- tmp = tmp*a;
- return tmp;
- }
- }
- string s;
- int main()
- {
- cin >> s >> n;
- BigInt t(s);
- t = binpow(t,n);
- cout << t;
- cout << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement