1010. Radix (25)

#include "stdafx.h"
#include <iostream>
#include <string.h>

using namespace std;

long long getnumbychar(char c)
{
	long long num;

	if(c >= '0' && c <= '9')
	{
		num = c - '0';
	}
	else 
	{
		num = c - 'a' + 10;
	}

	return num;
}

long long getradix(char s[])
{
	int len = strlen(s), i;
	long long cur, radix = -1;

	for(i = 0; i < len; i++)
	{
		cur = getnumbychar(s[i]);
		if(cur > radix)
		{
			radix = cur;
		}
	}

	radix++;
	if(radix < 2)
	{
		radix = 2;
	}

	return radix;
}

long long getnum(char s[], long long radix)
{
	int len = strlen(s), i;
	long long num = 0, cur;

	for(i = 0; i < len; i++)
	{
		cur = getnumbychar(s[i]);
		num = num * radix + cur;
	}

	return num;
}

long long getres(char s[], long long low, long long high, long long goal)
{
	long long mid, cur;

	while(low < high)
	{
		mid = (low + high) / 2;
		cur = getnum(s, mid);

		if(cur < 0 || cur >= goal)
		{
			high = mid;
		}
		else
		{
			low = mid + 1;
		}
	}

	return high;
}

int main()
{
	char n1[20], n2[20];
	int tag;
	long long radix;
	scanf("%s%s%d%lld", n1, n2, &tag, &radix);

	char temp[20];
	if(tag == 2)
	{
		strcpy(temp, n1);
		strcpy(n1, n2);
		strcpy(n2, temp);
	}

	long long low = getradix(n2), goal = getnum(n1, radix), high = goal + 1;
	long long res = getres(n2, low, high, goal);

	if(getnum(n2, res) == goal)
	{
		printf("%lld\n", res);
	}
	else
	{
		printf("Impossible\n");
	}

	system("pause");
	return 0;
}

 

posted on 2025-11-23 16:53  王景迁  阅读(0)  评论(0)    收藏  举报

导航