考虑到所有的特殊情况即可。

#include <bits/stdc++.h>
using namespace std;
void go(bool h)
{
	if(h) puts("Yes");
	else puts("No");
	exit(0);
}
int main()
{
	string s;
	cin>>s;
	bool t=false;
	if(s[0]=='-')
	{
		t=true;
		s.erase(0,1);
	}
	int n=s.size();
	s=' '+s;
	if(n==0) go(0);
	if(n==1)
	{
		if(s[1]>='1'&&s[1]<='9') go(1);
		if(s[1]=='0'&&!t) go(1);
		go(0);
	}
	if(s[1]=='0'&&s[2]=='x')
	{
		if(n==2) go(0);
		if(s[3]=='0')
		{
			if(n==3&&!t) go(1);
			go(0);
		}
		for(int i=3;i<=n;i++)
			if(s[i]<'0'||s[i]>'9'&&s[i]<'a'||s[i]>'f') go(0);
		go(1);
	}
	if(s[1]=='0'&&s[2]=='.')
	{
		if(n==2) go(0);
		for(int i=3;i<=n;i++)
			if(s[i]<'0'||s[i]>'9') go(0);
		if(!t) go(1);
		for(int i=3;i<=n;i++)
			if(s[i]!='0') go(1);
		go(0);
	}
	if(s[1]=='0')
	{
		if(s[2]=='0')
		{
			if(n==2&&!t) go(1);
			go(0);
		}
		for(int i=3;i<=n;i++)
			if(s[i]<'0'||s[i]>'7') go(0);
		go(1);
	}
	if(s[1]=='.') go(0);
	if(s[n]=='.') go(0);
	int e=0;
	for(int i=1;i<=n;i++)
		if(s[i]=='.') e++;
	if(e>1) go(0);
	for(int i=1;i<=n;i++)
		if((s[i]<'0'||s[i]>'9')&&s[i]!='.') go(0);
	go(1);
	return 0;
}