小猫很无聊,竟然开始研究数字的整除了,有这样一个问题。给定一个非负整数,问能否重排它的全部数字,使得重排后的数能被8整除。输入格式:多组数据,每组数据是一个非负整数。非负整数的位数不超过10000位。输出格式每组数据输出一行,YES或者NO,表示能否重排它的全部数字得到能被8整除的数。注意: 重排可以让0开头。
实现代码:
#include "iostream"
#include "algorithm"
#define maxn 1000
char a[maxn];
int main()
{
int i,j,n,m=0;
for(i=0;i<10;i++)
{
a[i]=getchar();
if(a[i]=='\n')
{
break;
}
}
long k=0;
for(j=0;a[j]!='\n';j++)
{
k++;
}
std::sort(a,a+k);
do{
long c;
c=atol(a); //atol函数转换
if(c%8==0)
{
m++;
}
}while(std::next_permutation(a,a+k)); //利用next_permutation函数对数组进行重组
if(m)
{
printf("YES");
}
else
{
printf("NO");
}
return 0;
}
next_permutation()函数的用法:
这个函数是从小到大枚举出一个数列中的排序所有可能值
atol()函数的用法:
这个函数是将一个字符数组,转换为一个long整型的数