UESTC--1012--Ladygod(模拟水题)

来源:互联网 发布:c语言常用命令 编辑:程序博客网 时间:2024/06/04 19:05

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 InputSample Output
278 871 1
3 2

Source

Luk
找出两串数字中最大的数字max,那么进制一定是max+1,因为如果想结果足够大的话一定是进位尽可能多,所以一定就是max+1,接下来
就是大数相加的方法,求出结果
#include<cstdio>#include<cstring>#include<algorithm>using namespace std;int a[1010],b[1010];int main(){int t;scanf("%d",&t);while(t--){int n,m;memset(a,0,sizeof(a));memset(b,0,sizeof(b));scanf("%d%d",&n,&m);int maxx=0;int temp=n;while(temp){maxx=max(temp%10,maxx);temp/=10;}temp=m;while(temp){maxx=max(temp%10,maxx);temp/=10;}maxx++;int cnt1=0;while(n){a[cnt1++]=n%10;n/=10;}int cnt2=0;while(m){b[cnt2++]=m%10;m/=10;}int t=0;for(int i=0;i<100;i++){a[i]=a[i]+b[i]+t;if(a[i]>=maxx){a[i]-=maxx;t=1;}else t=0;}int f=0;for(int i=100;i>=0;i--)if(a[i]){f=i;break;}printf("%d\n",f+1);}return 0;}


0 0
原创粉丝点击