题目详情
给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除。
输入格式:
多组数据,每组数据是一个非负整数。非负整数的位数不超过10000位。
输出格式
每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数。注意: 重排可以让0开头。
代码附上:
#include<stdio.h>
#include<stdlib.h>
#include<math.h>
#include<string.h>
#define Max 10005
#define Inf 1<<30
int Ncon[10];
int com[10];
char num[Max];
bool low(int *a,int *b){
for(int i=0;i<10;i++){
if(a[i]<b[i]) return false;
}
return true;
}
int main(){
int i,len,shu;
bool able;
while((scanf("%s",num))!=EOF){
able = false;
len = strlen(num);
memset(Ncon,0,sizeof(Ncon));
for(i=0;i<len;i++){
Ncon[num[i]-'0']++;
}
if(len<2){if(Ncon[0]||Ncon[8]) able = true;}
else if(len<3){
for(i=0;i<100;i++){
if(i%8) continue;
memset(com,0,sizeof(com));
shu = i;
com[shu/10]++;
shu = shu %10;
com[shu]++;
if(low(Ncon,com)) {able = true;break;}
}
}
else{
for(i=0;i<1000;i++){
if(i%8) continue;
memset(com,0,sizeof(com));
shu = i;
com[shu/100]++;
shu = shu %100;
com[shu/10]++;
shu = shu %10;
com[shu]++;
if(low(Ncon,com)) {able = true;break;}
}
}
printf("%s\n",able?"YES":"NO");
}
return 0;
}