by chinmoy kanti dhar » Sat Jun 30, 2007 12:55 am
i don't find any reason to get wr,plz anybody help me to find the bug in this code.
#include<stdio.h>
#include<string.h>
#include<stdlib.h>
#include<math.h>
unsigned long con(char * c,int n)
{
int i,m,n1;
unsigned long p=0;
m=strlen(c);
for(i=0;i<m;i++)
{ n1=48;
if(c[i]>='A'&&c[i]<='Z')n1=n1+7;
p=(c[i]-n1)*pow(n,m-i-1) +p;
}
return p;
}
void main()
{
long b,m,n,i,j,k,p;
unsigned long c1[38],d1[100];
char c[20],d[20];
//freopen("c:\\123.txt","w",stdout);
while(scanf("%s %s",c,d)==2)
{
if(strcmp(c,"0")==0&&strcmp(d,"0")==0)
{
printf("%s (base 2) = %s (base 2)\n",c,d);
continue;
}
m=strlen(c);
b=0;
for(i=0;i<m;i++)
{n=48;
if(c[i]>='A'&&c[i]<='Z')n=n+7;
if(b<c[i]-n)b=c[i]-n;
}
k=b+1;
m=strlen(d);
b=0;
for(i=0;i<m;i++)
{ n=48;
if(d[i]>='A'&&d[i]<='Z')n=n+7;
if(b<d[i]-n)b=d[i]-n;
}
b=b+1;
for(i=k;i<=36;i++)
c1[i]=con(c,i);
for(i=b;i<=36;i++)
d1[i]=con(d,i);
p=0;
for(i=k;i<=36;i++)
{
for(j=b;j<=36;j++)
{
if(c1[i]==d1[j]){m=i;n=j;p=1;break;}
}
if(p==1)break;
}
if(p==1)
printf("%s (base %ld) = %s (base %ld)\n",c,m,d,n);
else printf("%s is not equal to %s in any base 2..36\n",c,d);
}
}