Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <iomanip>
- #include <string>
- #include <vector>
- #define ll long long
- using namespace std;
- typedef vector<int> lll;
- const long long e=10, k=1;
- istream& operator >>(istream& stream, lll& a) {
- string s, r;
- stream>>s;
- for (int i=s.size(); i>0; i-=k) {
- int b, j=i-k;
- if (j>=0) r=s.substr(j, k);
- else r=s.substr(0, i);
- b=stoi(r);
- a.push_back(b);
- }
- return stream;
- }
- ostream& operator <<(ostream& stream, lll a) {
- stream<<a[a.size()-1];
- for (int i=a.size()-2; i>=0; i--)
- stream<<setw(k)<<setfill('0')<<a[i];
- return stream;
- }
- bool operator >(lll a, lll b) {
- if (a.size()>b.size()) return true;
- if (a.size()<b.size()) return false;
- for (int i=a.size()-1; i>=0; i--) {
- if (a[i]>b[i]) return true;
- if (a[i]<b[i]) return false;
- }
- return false;
- }
- int complong(lll &a, lll &b) {
- if (a.size()>b.size()) return 1;
- if (a.size()<b.size()) return -1;
- for (int i=a.size()-1; i>=0; i--) {
- if (a[i]>b[i]) return 1;
- if (a[i]<b[i]) return -1;
- }
- return 0;
- }
- lll operator +(lll a, lll b) {
- lll c;
- int i, r=0;
- //if (complong(a, b)>0) swap(a, b);
- for (i=0; i<a.size()||i<b.size(); i++) {
- if (i<a.size()) r+=a[i];
- if (i<b.size()) r+=b[i];
- c.push_back(r%e);
- r/=e;
- }
- if (r) c.push_back(r);
- return c;
- }
- lll operator -(lll a, lll b) {
- lll c;
- int i, r=0;
- if (complong(a, b)<0) swap(a, b);
- for (i=0; i<a.size(); i++) {
- //if (i<a.size())
- r+=a[i];
- if (i<b.size()) r-=b[i];
- if (r<0) {
- c.push_back(r+e);
- r=-1;
- }
- else {
- c.push_back(r);
- r=0;
- }
- }
- while (c.back()==0&&c.size()>1) c.pop_back();
- return c;
- }
- lll operator *(lll a, ll b) {
- lll c; int i; ll r=0;
- if (b==0) {
- c.push_back(0);
- return c;
- }
- for (i=0; i<a.size()||r; i++) {
- if (i<a.size()) r+=a[i]*b;
- c.push_back(r%e);
- r/=e;
- }
- return c;
- }
- lll operator *(lll a, lll b) {
- lll c{1, 0}, d; int i, j;
- if (a==d||b==d) return d;
- if (b.size()>a.size()) swap(a, b);
- for (i=0; i<b.size(); i++) {
- c=a*b[i];
- for (j=0; j<i; j++) c.insert(c.begin(), 0);
- d=d+c;
- }
- return d;
- }
- lll operator /(lll a, ll b) {
- lll c;
- int i;
- ll r=0, t;
- for (i=a.size()-1; i>=0; i--) {
- r=r*e+a[i];
- t=r/b;
- c.insert(c.begin(), t);
- r-=t*b;
- }
- while (c.size()>1&&c[c.size()-1]==0)
- c.resize(c.size()-1);
- return c;
- }
- ll operator %(lll a, ll b) {
- lll c;
- int i;
- ll r=0, t;
- for (i=a.size()-1; i>=0; i--) {
- r=r*e+a[i];
- t=r/b;
- r-=t*b;
- }
- return r;
- }
- int main() {
- lll a={0}, z={0}, mp;
- vector<int> v;
- string s;
- ll i, k, m, n;
- char ch;
- cin>>m>>n>>s;
- if (s=="0") {
- cout<<0;
- return 0;
- }
- for (i=0; i<s.size(); i++) {
- a=a*m;
- ch=s[i];
- if (ch>='0'&&ch<='9') k=ch-'0';
- else if (ch>='A'&&ch<='Z') k=ch-'A'+10;
- mp={k};
- a=a+mp;
- }
- while (a>z) {
- v.push_back(a%n);
- a=a/n;
- }
- for (i=v.size()-1; i>=0; i--) {
- k=v[i];
- ch='A'+k-10;
- if (k<=9) cout<<k;
- else cout<<ch;
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement