您的位置:首页 > 产品设计 > UI/UE

UESTC 1012 Ladygod【进制转换】

2016-03-19 20:34 531 查看
1012 Ladygod



Time Limit:1000MS     Memory Limit:65535KB     64bit IO Format:%lld & %llu
Submit Status Practice UESTC
1012

Description

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

Input

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

接下来有TT行

每行含两个数A,BA,B (不超过44位的非00整数)

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;
}
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: