UESTC 1012:Ladygod【模拟】

本文探讨如何解决在给定的两个非零整数A和B(不超过44位)的情况下,求解在小于等于1010进制下不同进制加法可能得到的答案最大长度的问题。通过遍历所有可能的进制,找到使得结果长度最大的进制。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

Ladygod

Time Limit: 3000/1000MS (Java/Others)     Memory Limit: 65535/65535KB (Java/Others)
 

有一天人诹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 and output

Sample Input Sample Output
2
78 87
1 1
3 
2
AC-code:
#include<cstdio>
int main()
{
	int T,a,b,i,k1,k2,a1,a2,flag,k,num,ans,t,max;
	scanf("%d",&T);
	while(T--)
	{
		scanf("%d%d",&a,&b);
		max=0;
		for(i=2;i<=10;)
		{
			flag=0;
			k1=a,k2=b;
			a1=a2=0;
			t=1;
			while(k1)
			{
				k=k1%10;
				if(k>=i)
				{
					i=k+1;
					flag=1;
					break;
				}
				k1/=10;
				a1+=k*t;
				t*=i;
			}
			if(flag)
				continue;
			t=1;
			while(k2)
			{
				k=k2%10;
				if(k>=i)
				{
					i=k+1;
					flag=1;
					break;
				}
				k2/=10;
				a2+=k*t;
				t*=i;
			}
			if(flag)
				continue;
			ans=a1+a2;
			num=0;
			while(ans)
			{
				ans=ans/i;
				num++;
			}
			if(num>max)
				max=num;
			i++;
		}
		printf("%d\n",max);
	}
	return 0;
}


评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值