#include <iostream>
#include <string>
using namespace std;
long long str2decimal(string &str, long long radix) {
long long decimal = 0, oldvalue = 0;
for(int i = 0; i < str.length(); i ++) {
decimal *= radix;
decimal += str[i];
if(oldvalue > decimal) {
return 0x7FFFFFFFFFFFFFFF;
}
oldvalue = decimal;
}
return decimal;
}
int main(int argc, char **argv) {
string N[2];
for(int i = 0; i < 2; i ++) {
N[i].reserve(10);
}
int tag;
long long radix;
cin >> N[0] >> N[1] >> tag >> radix;
for(int i = 0; i < 2; i ++) {
for(int j = 0; j < N[i].length(); j ++) {
if(N[i][j] >= '0' && N[i][j] <= '9')
N[i][j] = N[i][j] - '0';
else
N[i][j] = N[i][j] - 'a' + 10;
}
}
long long decimal[2] = {0};
tag --;
for(int i = 0; i < N[tag].length(); i ++) {
decimal[tag] *= radix;
decimal[tag] += N[tag][i];
}
long long low = 0;
for(int i = 0; i < N[!tag].length(); i ++) {
if(N[!tag][i] > low)
low = N[!tag][i];
}
low ++;
long long high = decimal[tag] + 1;
bool flag = false;
while(low <= high) {
long long mid = (low + high)/2;
decimal[!tag] = str2decimal(N[!tag], mid);
if(decimal[!tag] == decimal[tag]) {
flag = true;
radix = mid;
break;
}
else if(decimal[!tag] > decimal[tag]) {
high = mid - 1;
}
else {
low = mid + 1;
}
}
if(flag)
cout << radix << endl;
else
cout << "Impossible" << endl;
return 0;
}1010. Radix (25)
最新推荐文章于 2020-06-02 13:52:16 发布
本文介绍了一个程序,该程序通过二分查找算法确定一个数从特定进制转换到十进制后的等价数值。首先将输入的字符串形式的数字转换为对应的数值,然后使用二分查找找到使得另一个数转换到十进制后与之相等的目标进制。
389

被折叠的 条评论
为什么被折叠?



