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

📄 1315 basic.cpp

📁 ACM 威士忌部分答案
💻 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 + -