⭐ 欢迎来到虫虫下载站! | 📦 资源下载 📁 资源专辑 ℹ️ 关于我们
⭐ 虫虫下载站

📄 2734297_ac_0ms_80k.c

📁 北大大牛代码 1240道题的原代码 超级权威
💻 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 + -