思路
暴力、模拟
代码
#include <iostream>
#include <cstdio>
#include <algorithm>
#include <queue>
#include <cmath>
#include <cstring>
#define ll long long
using namespace std;
const int maxn=6e6+6;
const ll mod=998244353;
const ll MOD=998244353;
ll power(ll x,ll a)
{
ll ans=1;
while(a)
{
if(a&1)
{
ans=ans*x%mod;
}
x=x*x%mod;
a>>=1;
}
return ans;
}
ll a,b,ans;
char optr;
int base;
bool isop(char c)
{
if(c=='+'||c=='-'||c=='*'||c=='/'||c=='=')
return 1;
else
return 0;
}
int getn(char c)
{
if(c>='A')
return c-'A'+10;
else
return c-'0';
}
void fun(string s)
{
a=0;b=0;ans=0;
int i;
for(i=0;!isop(s[i]);i++)
{
a*=base;
a+=getn(s[i]);
}
optr=s[i];
for(i++;s[i]!='=';i++)
{
b*=base;
b+=getn(s[i]);
}
for(i++;i<s.size();i++)
{
//cout<<getn(s[i])<<' ';
ans*=base;
ans+=getn(s[i]);
}
}
int main()
{
//std::ios::sync_with_stdio(false);cin.tie(0);
string s;
//int T;cin>>T;
while(cin>>s)
{
bool f=1;
int Max=-100;
for(int i=0;i<s.size();i++)
{
if(!isop(s[i]))
{
Max=max(Max,getn(s[i]));
}
}
Max=max(Max,1);
for(base=Max+1;base<17;base++)
{
fun(s);
//cout<<a<<' '<<optr<<' '<<b<<' '<<ans<<endl;
if(optr=='*'&&a*b==ans)
{
cout<<base<<endl;
f=0;
break;
}
else if(optr=='+'&&a+b==ans)
{
cout<<base<<endl;
f=0;break;
}
else if(optr=='-'&&a-b==ans)
{
cout<<base<<endl;
f=0;break;
}
else if(optr=='/'&&ans*b==a)
{
cout<<base<<endl;
f=0;break;
}
}
if(f)
cout<<-1<<endl;
}
return 0;
}
本文探讨了一种算法,该算法通过解析不同进制数的字符串表达,并进行数学运算来找出可能的进制基数。文章详细介绍了如何将字符转换为数值,执行加、减、乘、除操作,并验证等式是否成立,以确定正确的进制。
684

被折叠的 条评论
为什么被折叠?



