📄 2734297_ac_0ms_80k.c
字号:
#include <stdio.h>
#include <ctype.h>
#include <stdlib.h>
#include <string.h>
int mm;
int f(char ch)
{
if (isdigit(ch))
return ch-'0';
else
return ch-'a'+10;
}
void solve(char num[])
{
int i, t, tt, l, b, gg;
char *p, *q, str[81];
gg = 0;
if ((p=strchr(num,'#'))==NULL)
return ;
b = atoi(num);
tt = 0;l = 1;
if (b > 16 || b < 2)
{
mm = 0;
return ;
}
p = strchr(&num[(q = strchr(num,'#'))-num+1],'#');
if (p==NULL||p-q==1)
mm = 0;
else
{
t = p - num;
for (i = t-1; num[i]!='#'; i--)
{
if (f(num[i])>=b)
{
mm = 0;
return ;
}
else
{
tt += f(num[i])*l,l*=b;
if (gg&&f(num[i])&&num[t+1]=='#')
{
mm = 0;
return ;
}
if (l > 16)
{
gg = 1;
}
if ((tt<0||tt>16)&&num[t+1]=='#')
{
mm = 0;
return ;
}
}
}
solve(strcat(itoa(tt,str,10),&num[p-num+1]));
}
}
int main()
{
int t, i;
int mark;
char num[81];
scanf("%d",&t);
while (t--)
{
mark = 0;
scanf("%s",num);
for (i = 0; num[i]!='\0'; i++)
{
if (num[i]=='#')
{
mark = 1;
}
if (num[i]!='#'&&!isdigit(num[i])&&(num[i]>'f'||num[i]<'a'))
{
printf("no\n");
goto con;
}
}
if (!mark)
{
printf("yes\n");
continue;
}
if (mark&&num[i-1]!='#')
{
printf("no\n");
continue;
}
mm = 1;
solve(num);
if (mm)
printf("yes\n");
else
printf("no\n");
con:
;
}
return 0;
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -