質問:
例:
問題解決のアイデア:
2から16進数まで順番に試してください。ただし、4/2 = 2が5を出力するなど、多くの可能性がある場合は、最小の出力に注意してください。
ACコード
#include<iostream>
#include<cstdio>
#include<set>
#include<algorithm>
#include<stdlib.h>
#include<map>
#include<cstring>
#include<cmath>
using namespace std;
typedef long long ll;
ll qpow(ll m,ll q)
{
ll ans=1;
while(q)
{
if(q&1)
ans=ans*m;
m=m*m;
q>>=1;
}
return ans;
}
int main()
{
map<char,long long> mp;
mp['1']=1;mp['2']=2;mp['3']=3;
mp['4']=4;mp['5']=5;mp['6']=6;
mp['7']=7;mp['8']=8;mp['9']=9;
mp['A']=10;mp['B']=11;mp['C']=12;
mp['D']=13;mp['E']=14;mp['F']=15;
char str[20],num1[16],num2[16],num3[16],f[2];
int len1,len2,len3,flag;
ll x=0,y=0,z=0;
while(scanf("%s",str)!=EOF)
{
flag=0;
memset(num1,0,16);
memset(num2,0,16);
memset(num3,0,16);
int t;
while(str[flag]!='+'&&str[flag]!='-'&&str[flag]!='*'&&str[flag]!='/')
{
num1[flag]=str[flag];
flag++;
}
len1=flag;
f[0]=str[flag];
flag++;
t=flag;
while(str[flag]!='=')
{
num2[flag-t]=str[flag];
flag++;
}
len2=flag-1-len1;
flag++;
len3=strlen(str)-flag;
t=flag;
while(str[flag]!='\0')
{
num3[flag-t]=str[flag];
flag++;
}
int q=0,maxn=0;
for(int r=2;r<=16;r++)
{
ll res1=0;
for(int i=0;i<len1;i++)
{
res1+=mp[num1[i]]*qpow(r,len1-1-i);
if(mp[num1[i]]>maxn)
maxn=mp[num1[i]];
}
ll res2=0;
for(int i=0;i<len2;i++)
{
res2+=mp[num2[i]]*qpow(r,len2-1-i);
if(mp[num2[i]]>maxn)
maxn=mp[num2[i]];
}
ll res3=0;
for(int i=0;i<len3;i++)
{
res3+=mp[num3[i]]*qpow(r,len3-1-i);
if(mp[num3[i]]>maxn)
maxn=mp[num3[i]];
}
//printf("%lld %lld %lld %c\n",res1,res2,res3,f[0]);
if(f[0]=='+')
{
//printf("yes\n");
if((res1+res2)==res3)
{
//printf("yes\n");
if(r>maxn)
{
printf("%d\n",r);
q=1;
break;
}
}
}
else if(f[0]=='-')
{
if((res1-res2)==res3)
{
if(r>maxn)
{
printf("%d\n",r);
q=1;
break;
}
}
}
else if(f[0]=='*')
{
if((res1*res2)==res3)
{
if(r>maxn)
{
printf("%d\n",r);
q=1;
break;
}
}
}
else if(f[0]=='/')
{
if((((res1/res2)*res2)==(res1))&&((res1/res2)==res3))
{
if(r>maxn)
{
printf("%d\n",r);
q=1;
break;
}
}
}
}
if(q!=1)
printf("%d\n",-1);
}
return 0;
}
概要:
1.タイトルの要件に注意してください
。2.コードセグメントをコピーして貼り付けるときは、パラメーターの調整に注意してください。3.
コードが複雑すぎます