poj 1331 Multiply

来源:互联网 发布:安全动画预防网络诈骗 编辑:程序博客网 时间:2024/05/17 22:38


Memory: 208K Time: 0MSLanguage: C Result: Accepted

#include<stdio.h>

#include<string.h>
#include<math.h>
#define max(a,b,c) (a>b?a:b)>c?(a>b?a:b):c

int max2(char a[8],int h)
{
int max1=0,i;
for(i=0;i<h;i++)
if((a[i]-'0')>max1)
max1=a[i]-'0';
return max1;
}

int work(char a[8],char b[8],char c[8])
{
int i,j,h1,h2,h3,ans1,ans2,ans3,aa,bb,cc;
h1=strlen(a);
    aa=max2(a,h1);
h2=strlen(b);
bb=max2(b,h2);
h3=strlen(c);
cc=max2(c,h3);
for(i=max(aa,bb,cc)+1;i<=36;i++)//基础要大于所有数中最大的一个,例如121 最小基础为3不为2,因为二进制中没有2,
{
ans1=ans2=ans3=0;
for(j=0;j<h1;j++)
ans1+=(a[j]-'0')*pow(i,(h1-j-1));
for(j=0;j<h2;j++)
ans2+=(b[j]-'0')*pow(i,(h2-j-1));
for(j=0;j<h3;j++)
ans3+=(c[j]-'0')*pow(i,(h3-j-1));
if(ans1*ans2==ans3)
return i;
}
return 0;
}

int main()
{
int m;
char a[8],b[8],c[8];
scanf("%d",&m);
while(m--)
{
scanf("%s%s%s",a,b,c);
printf("%d\n",work(a,b,c));
}
return 0;
}