输入整数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);
}