题目
题目链接
代码
#include <iostream>
#include <string>
using namespace std;
long long int trans ( string& s, int radix) {
long long int total = 0 ;
for ( int i= 0 ; i< s. size ( ) ; ++ i) {
if ( s[ i] >= '0' && s[ i] <= '9' ) {
total = total* radix + ( s[ i] - '0' ) ;
}
else {
total = total* radix + ( s[ i] - 'a' + 10 ) ;
}
}
return total;
}
int find ( string& s, long long int total, int leftRadix, int rightRadix) {
if ( leftRadix == rightRadix && trans ( s, leftRadix) != total) {
return - 1 ;
}
int midRadix = ( leftRadix + rightRadix) / 2 , ans = 0 ;
long long int num = trans ( s, midRadix) ;
if ( num == total) {
ans = midRadix;
}
else if ( num < total) {
leftRadix = midRadix;
ans = find ( s, total, leftRadix, rightRadix) ;
}
else {
rightRadix = midRadix;
ans = find ( s, total, leftRadix, rightRadix) ;
}
return ans;
}
int main ( ) {
string s1, s2, s3;
int a, b;
long long int total1 = 0 ;
cin >> s1 >> s2 >> a >> s3;
if ( s3[ 0 ] >= '0' && s3[ 0 ] <= '9' ) b = stoi ( s3) ;
else b = s3[ 0 ] - 'a' + 10 ;
if ( a == 2 ) swap ( s1, s2) ;
total1 = trans ( s1, b) ;
char maxChar = '0' ;
for ( int i= 0 ; i< s2. size ( ) ; ++ i) {
if ( s2[ i] > maxChar) maxChar = s2[ i] ;
}
int leftRadix= 0 , rightRadix = 36 , midRadix = 0 ;
if ( maxChar>= '0' && maxChar<= '9' ) leftRadix = maxChar - '0' + 1 ;
else leftRadix = maxChar - 'a' + 11 ;
int res;
if ( trans ( s2, leftRadix) <= total1 && trans ( s2, rightRadix) >= total1)
res = find ( s2, total1, leftRadix, rightRadix) ;
else res = - 1 ;
if ( res != - 1 ) cout << res;
else cout << "Impossible" ;
return 0 ;
}
#include <iostream>
#include <string>
using namespace std;
long long int trans ( string& s, int radix) {
long long int total = 0 ;
for ( int i= 0 ; i< s. size ( ) ; ++ i) {
if ( s[ i] >= '0' && s[ i] <= '9' ) {
total = total* radix + ( s[ i] - '0' ) ;
}
else {
total = total* radix + ( s[ i] - 'a' + 10 ) ;
}
}
return total;
}
int main ( ) {
string s1, s2, s3;
int a, b;
long long int total1 = 0 ;
cin >> s1 >> s2 >> a >> s3;
if ( s3[ 0 ] >= '0' && s3[ 0 ] <= '9' ) b = stoi ( s3) ;
else b = s3[ 0 ] - 'a' + 10 ;
if ( a == 2 ) swap ( s1, s2) ;
total1 = trans ( s1, b) ;
char maxChar = '0' ;
for ( int i= 0 ; i< s2. size ( ) ; ++ i) {
if ( s2[ i] > maxChar) maxChar = s2[ i] ;
}
int leftRadix= 0 , rightRadix = 36 , midRadix = 0 ;
if ( maxChar>= '0' && maxChar<= '9' ) leftRadix = maxChar - '0' + 1 ;
else leftRadix = maxChar - 'a' + 11 ;
int res;
if ( trans ( s2, leftRadix) > total1) {
res = - 1 ;
}
else {
for ( int i= leftRadix; i<= rightRadix; ++ i) {
long long int num = trans ( s2, i) ;
if ( num == total1) {
res = i;
break ;
}
}
}
if ( res != - 1 ) cout << res;
else cout << "Impossible" ;
return 0 ;
}