假定幸运数是只包含4或7的正整数,如7、47。判断一个正整数n是不是一个幸运数。是则输出YES,否则输出NO。不考虑负数,0或者其他特殊情况。不考虑溢出或者超出整型范围的情况。通用版!-CSDN博客

141 阅读1分钟

#include<stdio.h>
#include<math.h>
int main()
{
int n;
scanf("%d",&n);
int ns = n;     //用来代替n进行运算 

int all[10];    //用来储存每一位数字 
int i;
for(i = 0 ; i < 10 ; i++)
{
all[i] = 0;        //初始化 
}



//先找到有多少位数
int count = 0 ; //计数器

while(ns > 0)
{
ns = ns / 10;
count++;    
}                 //此时已经记录了有多少位数 

int yu = 10;    //用来制作第一步 先把原来的数全部取余 1234 -> 4 34 234 1234 然后存入数组 
int j;
for(j = 1 ; j <= count ; j++)
{
all[j] = n % yu;
yu = yu * 10;     
}

int k;
int t;            //这里准备用除  用除能够把原来的数里的每一个数字都提取出来 
for(k = 0 ; k <= count ; k++) //比如四位数,就要用四遍循环 
{
for( t = 0 ; t < count; t++)    //数组是从索引为0出发的 
{
if (all[k] > 10)
{
all[k] = all[k] / 10;
}
}
}

//重难点 判断NO 
int p ;
int have = 0;//标志  如果为0则没有等于4或7 为1则有 
for(p = 0 ; p < count ;p++)
{
if(all[p] == 4 || all[p] == 7)
{
printf("YES");
have = 1;
break;
}


if(p == count && !have)//如果经过遍历后 用于遍历的变量如果等于总位数,并且标志始终为0,那就说明都不等于7或4 
{
printf("NO");
}



//    int g;
//    for(g = 1 ; g <= count ; g++)
//    {
//        printf("%d\n",all[g]);
//    }
return 0;
}