按理来说复杂度应该是O(log8(x)*log10(x)+log16(x)*log10(x)),小于1e6,为什么会T,code:
#include <iostream>
#include <cstring>
#include <cctype>
const int maxn = 1005;
const std::string to_char = "0123456789abcdefghijklmnopqrstuvwxyz";
struct BigInterger{
int a[maxn],len;
int &operator[](int i){return a[i];}
BigInterger(int x = 0){
memset(a,0,sizeof(a));
for (len = 1;x;len++)
a[len] = x % 10,x /= 10;
len--;
}
BigInterger &operator=(int x){return *this = BigInterger(x);}
void flatten(int l){
len = l;
for (int i = 1;i <= len;i++)
a[i + 1] += a[i] / 10,a[i] %= 10;
while (!a[len]) len--;
}
BigInterger operator*(int x){
BigInterger ans;
for (int i = 1;i <= len;i++) ans[i] = a[i] * x;
ans.flatten(len + 11);
return ans;
}
BigInterger operator+(BigInterger x){
BigInterger ans;
for (int i = 1;i <= std::max(len,x.len);i++) ans[i] = a[i] + x[i];
ans.flatten(std::max(len,x.len) + 1);
return ans;
}
BigInterger operator/(int x){
int r = 0;
BigInterger ans;
for (int i = len;i;i--){
r = r * 10 + a[i];
ans[i] = r / x,r %= x;
}
ans.flatten(len);
return ans;
}
int operator%(int x){
int r = 0;
BigInterger ans;
for (int i = len;i;i--){
r = r * 10 + a[i];
ans[i] = r / x,r %= x;
}
return r;
}
bool operator>=(BigInterger x){
if (len != x.len) return len > x.len;
for (int i = len;i;i--)
if (a[i] != x[i])
return a[i] > x[i];
return 1;
}
};
void write(BigInterger x,int k);
void read(BigInterger &x,int k){
x = 0;
char c = getchar_unlocked();
while (!isdigit(c)) c = getchar_unlocked();
while (isdigit(c)) x = x * k + (c - '0'),c = getchar_unlocked();
}
void write(BigInterger x,int k){
if (x >= k) write(x / k,k);
putchar_unlocked(to_char[x % k]);
}
int main(){
BigInterger num;
read(num,8);
write(num,16);
return 0;
}