UESTC 1012 Ladygod【进制转换】

来源:互联网 发布:vb书籍pdf 编辑:程序博客网 时间:2024/06/15 15:31


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(1T100000)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;}




0 0
原创粉丝点击