标题是--数据输出,求大神指点迷津

输入整数n(n<100)和m(m<10),输出m和m的倍数,还有包含m的数字,例如(6,12,16,18...60,66,72,76...)。

Input

输入正整数n和m。

Output

输出从小到大排列的不大于n的与m有关的数字。每组数据占一行,每个数字后面有一个空格。

Sample Input

30 6
Sample Output

6 12 16 18 24 26 30
HINT

最后一个数字后面也有空格

代码如下
#include
int main()
{
int n,m,i;
scanf("%d %d",&n,&m);
for(i=1;i<=n;i++)
{
if(i%m==0||i%10==6)
printf("%d ",i);
}
printf("\n");
return 0;
}
测试没错,就是提交错误

错误很明显,if语句后 i%10 == m

是的,这点我只是针对此题了,但是改过后还是不对

提交上面显示社么错误么?

改为:
if(i%m==0||i%10==m||i/10==m)

=================/data5.out
Right:
9 18 19


Your:
6 9 16 18

//.cpp
 #include <stdio.h>

int main(){

    int m, n;

    while (scanf("%d%d", &n, &m) != EOF) {

        for (int i = 1; i <= n; i++){
            //判断i是否是m的倍数
            if (i % m == 0){

                printf("%d ", i);
                continue;
            }
            //判断i中是否包含m
            //注意:题设m<10 , 意味m为0~9的单个数字,若m>10呢? ...
            if (i > m){
                int  remainder;
                int  intresult = i;
                //此处使用循环整除 比如 45 对于 4    余数45%10 =5  整除结果45/10 = 4  5!=4 再循环,此时4/10 = 0 4%10 =4; 4==4 ok得结果; 
                while (intresult > m ){
                    remainder = intresult % 10;
                    intresult = intresult / 10;
                    if (remainder == m){
                        printf("%d ", i);
                        break; 
                    }
                }
            }
        }
        printf("\n");
    }

}

对,关键是要正确的实现“包含”操作。在遍历n的过程中,看m是否是n的十位数或者个位数。

如果不强调效率的话,可以转换为一个判断是否为子串的操作。

包含m的数没注意所在数位,请你再看一下吧~

if(i%m==0||i%10==6)
改为
if(i%m==0||i%10==m)

if(i%m==0||i%10==m||i/10==m)

按下面方法试试

 for(i = m; i<= n; i++)
{
    if((i%m)==0)
        printf("%d ",i);
}

没看清你的要求 重写了下 :D

for(i = m; i<= n; i++)
{
if(((i%m)==0) || ((m / 10) == m) || ((m % 10) == m))
printf("%d ",i);
}