UESTC 1012 Ladygod【进制转换】


1012 Ladygod

Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu

Description

有一天人诹Lee在随手帮女神做题,突然女神发现了自己演算纸上的一个式子,但是式子只有两个加数却没有结果,最近在学不同进制加减法的女神忘了这个两个数字是多少进制了(只记得是小于等于 10 10),但是她很好奇在可能的多少进制下这个式子得到的答案长度最长,为了从人赢Lee手中抢走女神,你需要快速计算出这个答案,例如 78+87= 78+87=? 在 10 10进制下是 165 165,在 9 9进制下是 176 176,而小于等于 8 8的进制显然是不合法的,所以这个式子答案可能的最长长度就是 3 3.

Input

第一行读入一个整数  T(1T100000) T(1≤T≤100000) 表示数据组数

接下来有 T T

每行含两个数 A,B A,B (不超过 4 4位的非 0 0整数)

Output

对于每个数据输出一个数字,表示可能的答案的最大长度

Sample Input


78 87 
1 1

Sample Output


2



题解:

为了使得得到的结果的位数长,那么进制数要尽量小,最小的情况便是两个数字中出现的1-9 中最大的数字加上1 ,以此可求出是多少进制的数,记为 x

需要计算两个值的和,注意他们都是 x进制的数,所以需要先转化为10进制的数,然后再求转化为x 进制时的位数。


进制转化:(只讨论整数)

如果把n 转化为m 进制的数,那么只需要用一直用n 短除m,记录每步得到的余数,直到n 变成0,然后倒序排列所得到的余数,便是n 的m 进制的表现形式。 


/*
http://blog.csdn.net/liuke19950717
*/
#include<stdio.h>
#include<math.h>
#include<algorithm>
using namespace std;
int num(int x)//找至少是多少进制的数 
{
	int ans=0;
	while(x)
	{
		ans=max(x%10,ans);
		x/=10;
	}
	return ans+1;//别忘加 1  
}
int slove(int x,int base)//计算最终结果的位数 
{
	int ans=0;
	while(x)
	{
		++ans;
		x/=base;
	}
	return ans;
}
int cal(int x,int base)//计算某进制的数字转化为10进制的结果
{
	int ans=0,i=1;
	while(x)
	{
		ans=ans+(x%10)*i;
		i*=base;
		x/=10;
	}
	return ans;
}
int main()
{
	int t;
	scanf("%d",&t);
	while(t--)
	{
		int a,b;
		scanf("%d%d",&a,&b);
		int base=max(num(a),num(b)),sum=cal(a,base)+cal(b,base);
		printf("%d\n",slove(sum,base));
	}
	return 0;
}




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值