Posted: Sun Feb 25, 2007 11:28 pm
Change the printf function..
You have to print each output in a separate line..
try: printf(".....\n")
You have to print each output in a separate line..
try: printf(".....\n")
Code: Select all
ERASED
Code: Select all
2E 2
153 10
N 1
331 87
9D 312
86 5V
Code: Select all
2E is not equal to 2 in any base 2..36
153 is not equal to 10 in any base 2..36
N is not equal to 1 in any base 2..36
331 (base 6) = 87 (base 15)
9D (base 21) = 312 (base 8)
86 (base 25) = 5V (base 35)
Code: Select all
#include<algorithm>
#include<numeric>
#include<iostream>
#include<sstream>
#include<string>
#include<vector>
#include<queue>
#include<stack>
#include<set>
#include<map>
#include<cstdio>
#include<cstdlib>
#include<cctype>
#include<cassert>
#include<cmath>
#include<complex>
using namespace std;
#define FOR(i,a,b) for(int i=(int)a;i<(int)b;++i)
#define REP(i,n) for(int i=0;i<(int)n;++i)
#define sz size()
#define pb push_back
#define all(a) a.begin(),a.end()
typedef vector<int> vi;
typedef vector<string> vs;
class base
{
public:
int code[91];
base()
{
char a[]={'0','1','2','3','4','5','6','7','8','9','A','B','C','D','E','F','G','H','I','J','K','L','M','N','O','P','Q','R','S','T','U','V','W','X','Y','Z'};
int j=0;
REP(i,36)
{
code[(int)a[i]]=j;
j++;
}
}
void input()
{
string in="";
while(getline(cin,in))
{
stringstream ss(in);
string s1,s2;
ss>>s1>>s2;
//cout<<s1<<" "<<s2<<"\n";
int m1,m2,v1,v2;
m1=min_base(s1);m2=min_base(s2);
if(m1==1)
m1++;
if(m2==1)
m2++;
v1=value_decimal(s1,m1);
v2=value_decimal(s2,m2);
//cout<<v1<<" "<<v2<<"\n";
if(v1==v2)
{
cout<<s1<<" (base "<<m1<<") = "<<s2<<" (base "<<m2<<")"<<"\n";
continue;
}
long long match[37];
for(int i=m1;i<=36;i++)
{
long long v1=value_decimal(s1,i);
match[i]=v1;
//cout<<v1<<" ";
}
//cin.get();cin.get();
bool f=false;
for(int i=m2;i<=36;i++)
{
long long v=value_decimal(s2,i);
int lo=m1,hi=36;
while(lo<hi-1)
{
int mid=(lo+hi)/2;
if(v==match[mid])
{
cout<<s1<<" (base "<<mid<<") = "<<s2<<" (base "<<i<<")"<<"\n";
f=true;
break;
}
if(v<match[mid])
hi=mid;
else
lo=mid;
//cout<<mid<<" ";
// cin.get();
}
if(f)
break;
}
if(!f)
cout<<s1<<" is not equal to "<<s2<<" in any base 2..36\n";
}
}
int min_base(string s)
{
int v=0;
int ln=s.sz;
REP(i,ln)
{
if(v<code[(int)s[i]])
v=code[(int)s[i]];
}
return (v+1);
}
long value_decimal(string s,int b)
{
long long result=0;
int ln=s.sz;
REP(i,ln)
{
result=result*(long long)b+(long long)code[(int)s[i]];
}
return result;
}
};
int main()
{
base a;
a.input();
//system("pause");
return 0;
}
Code: Select all
deleted
Code: Select all
000 00000
Code: Select all
9 21
B 14
6 20
Code: Select all
9 (base 10) = 21 (base 4)
B (base 12) = 14 (base 7)
6 (base 7) = 20 (base 3)
Code: Select all
#include<iostream>
using namespace std;
long long pow(int i,int j)
{
long long val=1;
int k;
for (k=1;k<=j;k++)
val=val*i;
return val;
}
int main()
{
char X[1000],Y[1000];
int l1,l2,maxx,maxy,i,j,k,FLAG;
long long N1,N2;
while (scanf("%s%s",X,Y)!=EOF)
{
l1=strlen(X);
l2=strlen(Y);
maxx=1,maxy=1;
for (i=0;i<l1;i++)
if (isdigit(X[i]))
{
if (X[i]-48>maxx)
maxx=X[i]-48;
}
else if (isalpha(X[i]))
{
if (X[i]-55>maxx)
maxx=X[i]-55;
}
for (i=0;i<l2;i++)
if (isdigit(Y[i]))
{
if (Y[i]-48>maxy)
maxy=Y[i]-48;
}
else if (isalpha(Y[i]))
{
if (Y[i]-55>maxy)
maxy=Y[i]-55;
}
maxx++;maxy++;
FLAG=0;
for (i=maxx;i<36 && FLAG==0;i++)
for (j=maxy;j<36 && FLAG==0;j++)
{
N1=0;N2=0;
for (k=l1-1;k>=0;k--)
if (isdigit(X[k]))
N1+=pow(i,l1-k-1)*(X[k]-48);
else if (isalpha(X[k]))
N1+=pow(i,l1-k-1)*(X[k]-55);
for (k=l2-1;k>=0;k--)
if (isdigit(Y[k]))
N2+=pow(j,l2-k-1)*(Y[k]-48);
else if (isalpha(Y[k]))
N2+=pow(j,l2-k-1)*(Y[k]-55);
if (N1==N2)
FLAG=1;
}
if (FLAG==1)
printf("%s (base %d) = %s (base %d)\n",X,--i,Y,--j);
else
printf("%s is not equal to %s in any base 2..36\n",X,Y);
}
}
Code: Select all
#include<stdio.h>
#include<ctype.h>
char v[2][20];
int base[2];
int tonum(char c){
if(isdigit(c))
return c-'0';
else
return toupper(c)-'A'+10;
}
long long translate(char *s, int base)
{
long long val = 0;
int t = 0;
while(*s){
val *= base;
t = tonum(*s);
if(t>=base)
return -1;
val += t;
s++;
}
return val;
}
int check()
{
int i;
int j;
long long t[2][37];
for(i=0;i<2;i++)
for(j=2;j<=36;j++)
t[i][j]=translate(v[i],j);
for(i=2;i<=36;i++)
for(j=2;j<=36;j++)
if(t[0][i]==t[1][j]&&t[0][i]!=-1){
base[0]=i;
base[1]=j;
return 1;
}
return 0;
}
int main()
{
while(scanf("%s%s",v[0],v[1])!=EOF){
if(check())
printf("%s (base %d) = %s (base %d)\n",
v[0],base[0],v[1],base[1]);
else
printf("%s is not equal to %s in any base 2..36\n",
v[0],v[1]);
}
return 0;
}