纯暴力 如果有多种可能的话 输出一个满足条件的就可以
#include <iostream>
#include <cstdio>
#include <cstring>
using namespace std;
int get_num(char a,char b,char c)
{
int ans = 0;
ans = ans + (a - '0') * 100 + (b - '0') * 10 + (c - '0') * 1;
return ans;
}
int main()
{
char data[110],blank='0';
while(cin>>data)
{
int len = strlen(data),flag =0;
for(int i = 0; i <len ; i++)
{
if(data[i] == '8' ||data[i] =='0')
{
cout<<"YES"<<endl;
cout<<data[i]<<endl;
flag = 1;
break;
}
}
if(flag == 1)
continue;
if(len == 1)
{
if(get_num(blank,blank,data[0]) % 8 == 0)
{
cout<<data<<endl;
continue ;
}
else
{
cout<<"NO"<<endl;
continue ;
}
}
if(len == 2)
{
if(get_num(blank,data[1],data[0]) % 8 == 0)
{
cout<<"YES"<<endl;
cout<<data<<endl;
continue ;
}
if(get_num(blank,blank,data[0]) % 8 == 0)
{
cout<<"YES"<<endl;
cout<<data[0]<<endl;
continue ;
}
if(get_num(blank,blank,data[1]) % 8 == 0)
{
cout<<"YES"<<endl;
cout<<data[1]<<endl;
continue ;
}
cout<<"NO"<<endl;
continue ;
}
for(int i = 0; i < len ; i ++)
{
for(int j = i + 1; j < len ; j ++)
{
if(get_num(blank,data[i],data[j]) % 8 == 0)
{
cout<<"YES"<<endl;
cout<<get_num(blank,data[i],data[j])<<endl;
flag = 1;
break;
}
}
if(flag == 1)
break;
}
if(flag == 1)
continue ;
for(int i = 0; i < len; i ++)
{
for(int j = i + 1; j < len; j ++)
{
for(int k = j + 1; k < len; k ++)
{
if(get_num(data[i],data[j],data[k]) % 8 == 0)
{
cout<<"YES"<<endl;
cout<<get_num(data[i],data[j],data[k])<<endl;
flag = 1;
break;
}
}
if(flag == 1)
break;
}
if(flag == 1)
break;
}
if(flag == 1)
continue;
cout<<"NO"<<endl;
}
return 0;
}