输出2到5000中所有含有6和8的数

用C语言写,2到5000中含6和8的数,急需,希望大神指教一下,哎,新手好难

关于abcd的四个循环,n=a+b×10+c×100+d×1000。循环中加入判断,有6或者8时输出。

首先要分割问题
2-5000是数(num)的范围
6和8是判定条件if
判定的对象是数(num)的数位上的数字

我好久没有用过c语言了,不过和java语言差不多稍微修改一下就可以了
boolean flag = false;
int count = 0;
int number =2;
for (number= 2; number <= 5000; number++) {
String sum = Integer.toString(number);
char[] arr =sum.toCharArray();
for(int i = 0;i<arr.length;i++)
{
String array = arr[i]+"";
if (array.equals("6") || array.equals("8")) {
flag = true;
break;
}
}
if (flag==true) {
count ++;

        }
    }
    System.out.println("count = "+count);
}

只有一位一位的去处来比较,仔细想了一下,确实没有什么好的算法,感觉这些数之间也没有什么规律。
取每一位数的算法可以去看下,经常会用到,可以记住

c不知道,用java就简单了,转成String,在判断包含6或8,完事!

#include
main()
{
int a,b,c,d,flag1=0,flag2=0,flag3=0,flag4=0,n;
for(a=0;a<=9;a++)
{
if(a==6||a==8)
{
flag1=1;
}
for(b=0;b<=9;b++)
{
if(b==6||b==8)
{
flag2=1;
}
for(c=0;c<=9;c++)
{
if(c==6||c==8)
{
flag3=1;
}
for(d=0;d<=5;d++)
{
if(d==6||d==8)
{
flag4=1;
}
n=a+b*10+c*100+d*1000;
if((flag1==1||flag2==1||flag3==1||flag4==1)&&n!=0&&n!=1)
{
printf("%4d ",n);
}
flag4=0;
}
flag3=0;
}
flag2=0;
}
flag1=0;
}
}

其实也可以先表达2-5000这4999个数,然后不断向下取余和整除,得到个位,十位,百位,千位的数字,然后写一个判断是否是6或者8就可以了。

int a = 0, aa = 0, aaa = 0;/*用C语言写,2到5000中含6和8的数,急需,希望大神指教一下,哎,新手好难*/
do
{
while (a == (aa * 10 + 6)||a == (aa * 10 + 8))
{
printf_s("%d ", a * 10 + aaa);
if (++aaa > 9){ aaa = 0; break; }
}
if (a != (aa * 10 + 6))
if (a != (aa * 10 + 8))
{
printf_s("%d ", a * 10 + 6);
printf_s("%d ", a * 10 + 8);
}
if (a == (aa * 10 + 8)) ++aa;
++a;
} while (a<500);