📄 1315 basic.cpp
字号:
//basic
#include <cstdio>
#include <string>
using namespace std;
char unit[101],str[1001];
int check(int base)
{
int i,j,k,t,len;
len=strlen(unit);
if(len==0)
return -1;
i=j=len-1;
k=1;t=0;
while(i>=0)
{
if(unit[i]>='0' && unit[i]<='9')
j=unit[i]-'0';
else
j=10+unit[i]-'a';
if(j>=base)
return -1;
else
t+=k*j;
if(t>17 || k>17)
{
while(i>=0)
{
if(unit[i]>='0' && unit[i]<='9')
j=unit[i]-'0';
else
j=10+unit[i]-'a';
if(j>=base)
return -1;
i--;
}
return 17;
}
k*=base;
i--;
}
return t;
}
int toNum(int &s)
{
int i,j,n,b,t,c;
j=1;b=0;c=0;i=s;
while(str[i]!='#' && str[i]!=0)
i++;
if(str[i]==0)
return -1;
t=i+1;
for(i-- ; i>=s ;i--)
{
b+=j*(str[i]-'0');
j*=10;
if(b>17)
return 17;
}
i=0;
while(str[t]!='#' && str[t]!=0)
{
unit[i]=str[t];
t++;i++;
}
if(str[t]=='#')
{
unit[i]=0;
s=t+1;
return b;
}
else
return -1;
}
int main()
{
int i,j,n,nbase,t,len;
bool flag;
scanf("%d",&n);
while(n--)
{
scanf("%s",str);
len=strlen(str);
for(i=0 ,j=0;i<len;i++)
if(str[i]=='#')
j++;
flag=true;
if(j%2==1)
flag=false;
else if(j==0)//无#
{
for(i=0;i<strlen(str);i++)
{
if(str[i]>='0' && str[i]<='9')
j=str[i]-'0';
else
j=10+str[i]-'a';
if(j>16)
flag=false;
}
}
else
{
j=0;t=0;flag=true;
while(str[j])
{
nbase=toNum(j);
if(nbase<0)
{
flag=false;
break;
}
else if(nbase==0 && t>1)
nbase=t;
else if(nbase==0 && t==0)
{
flag=false;
break;
}
if(nbase<2 || nbase>16)
{
flag=false;
break;
}
t=check(nbase);
if( t<0 )
{
flag=false;
break;
}
}
}
if(flag)
printf("yes\n");
else
printf("no\n");
}//while n
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -