Ladygod
Time Limit: 3000/1000MS (Java/Others) Memory Limit: 65535/65535KB (Java/Others)
有一天人诹Lee
在随手帮女神做题,突然女神发现了自己演算纸上的一个式子,但是式子只有两个加数却没有结果,最近在学不同进制加减法的女神忘了这个两个数字是多少进制了(只记得是小于等于
10
10),但是她很好奇在可能的多少进制下这个式子得到的答案长度最长,为了从人赢Lee
手中抢走女神,你需要快速计算出这个答案,例如
78+87=?
78+87=? 在
10
10进制下是
165
165,在
9
9进制下是
176
176,而小于等于
8
8的进制显然是不合法的,所以这个式子答案可能的最长长度就是
3
3.
Input
第一行读入一个整数 T(1≤T≤100000) T(1≤T≤100000) 表示数据组数
接下来有 T T行
每行含两个数 A,B A,B (不超过 4 4位的非 0 0整数)
Output
对于每个数据输出一个数字,表示可能的答案的最大长度
Sample input and output
Sample Input | Sample Output |
---|---|
2 78 87 1 1 | 3 2 |
AC代码:
//UESTC1012(水模拟)
#include<cstdio>
#include<cstring>
#include<algorithm>
using namespace std;
int ans[10],bns[10];
int fun(int n)
{
int m=0;
while(n)
{
if((n%10)>m) m=n%10;
n/=10;
}
return m;
}
int fun1(int n,int a[])
{
int i=0;
while(n)
{
a[i++]=n%10;
n/=10;
}
return i;
}
int main()
{
int t,a1,b1,n1,n2,n,cnt,k,i,j,len1,len2;
int cns[50];
scanf("%d",&t);
while(t--)
{
memset(ans,0,sizeof(ans));
memset(bns,0,sizeof(bns));
scanf("%d%d",&a1,&b1);
n1=fun(a1);
n2=fun(b1);
n=max(n1,n2)+1;
cnt=0;
len1=fun1(a1,ans);
len2=fun1(b1,bns);
len1=max(len1,len2);
memset(cns,0,sizeof(cns));
for(i=0;i<len1;i++)
{
cns[i]+=ans[i]+bns[i];
if(cns[i]>=n)
{
cns[i+1]++;
cns[i]%=n;
}
}
for(i=4;i>=0;i--)
{
if(cns[i]!=0)
{
cnt=i;
break;
}
}
printf("%d\n",cnt+1);
}
return 0;
}