码蹄集:“天天向上”擂台赛第一期

195 阅读1分钟

题目 假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是否能被一个幸运数整除。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。

格式

输入格式:输入为整型

输出格式:能被一个幸运数整除则输出YES,否则输出NO

样例 1

输入:

47

输出:

YES

本题相关知识点: 语言基础:公式与计算

题解

创建一个数据结构二叉树

image.png

函数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;
}