PAT 1010. Radix

#include <stdio.h>
#include <iostream>
#include <algorithm>
#include <vector>
#include <set>
#include <functional>
#include <string>
#include <queue>
#include <string.h>

using namespace std;

long long int A;
char strA[20],strB[20];
int which, radix;
#define  MAXR 60
int charToInt(char ch)
{
	if(ch>='0' && ch<='9')
		return ch-'0';
	return ch-'a'+10;
}
long long int toInt(char* str, int radix)
{
	long long int sum=0;
	for(int i=0;i<strlen(str);i++)
	{
		sum = sum*radix + charToInt(str[i]);
	}
	return sum;
}

bool cmp(int a, long long int target)
{
	return toInt(strB,a) < target;
}
int main()
{

	scanf("%s %s %d %d",strA,strB,&which,&radix);
	if(which == 2)
	{
		A = toInt(strB,radix);
		strcpy(strB,strA);
	}else
	{
		A = toInt(strA,radix);
	}

	int radixs[MAXR];
	for(int i=0;i<MAXR;i++)
		radixs[i] = i+1;

	char* maxD = max_element(strB,strB+strlen(strB));
	int imax;
	if(*maxD>='a' && *maxD<='z')
		imax = *maxD-'a'+10;
	else 
		imax = *maxD-'0';

	int * res = lower_bound(radixs+imax,radixs+MAXR,A,cmp);
	if(res != radixs+MAXR && A == toInt(strB,*res))
	{
		printf("%d",*res);
	}else
		printf("Impossible");
	return 0;
}



转载于:https://my.oschina.net/superpdm/blog/350582

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值