题目 假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是否能被一个幸运数整除。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。
格式
输入格式:输入为整型
输出格式:能被一个幸运数整除则输出YES,否则输出NO
样例 1
输入:
47
输出:
YES
本题相关知识点: 语言基础:公式与计算
题解
创建一个数据结构二叉树
函数getLuckyNum(int k)求得二叉树中第i个幸运数(i>=2)
int getLuckyNum(int k){//得到第k为幸运数,k>=2,再用遍历即可判断是否可以整除
int flag;//作为后续判断
int lenth = (int)log2(k);//第k位数,在除了根节点的第lenth层,一共又lenth位数
int x,y,n,num=0;
x=k;
while(x!=0){
flag=x%2;
if(flag==1){
num+=7*pow(10,--lenth);
}
else if(flag==0){
num+=4*pow(10,--lenth);
}
x/=2;
}
return num;
}
主函数
int main(){
int x,y;
int i;
scanf("%d",&x);
int len = pow(2,log2(x)+1)-1;
int num = getLuckyNum(2);
for(i=3;i<len;i++,num = getLuckyNum(i)){
if(x%num==0){
printf("YES");
return 0;
}
}
printf("NO");
return 0;
}
整体代码,复制直接运行
/*假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是否能被一个幸运数整除。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。
不考虑溢出或者超出整型范围的情况。*/
/*
创建一个数据结构二叉树
1 01
4 7 10 11
4 7 4 7 100 101 110 111
4 7 4 7 4 7 4 7 1000 1001 1010 1011 1100 1101 1110 1111
*/
*/
# include <stdio.h>
# include <math.h>
int getLuckyNum(int k){//得到第k为幸运数,k>=2,再用遍历即可判断是否可以整除
int flag;//作为后续判断
int lenth = (int)log2(k);//第k位数,在除了根节点的第lenth层,一共又lenth位数
int x,y,n,num=0;
x=k;
while(x!=0){
flag=x%2;
if(flag==1){
num+=7*pow(10,--lenth);
}
else if(flag==0){
num+=4*pow(10,--lenth);
}
x/=2;
}
return num;
}
int main(){
int x,y;
int i;
scanf("%d",&x);
int len = pow(2,log2(x)+1)-1;
int num = getLuckyNum(2);
for(i=3;i<len;i++,num = getLuckyNum(i)){
if(x%num==0){
printf("YES");
return 0;
}
}
printf("NO");
return 0;
}