c++拆数并判断出现问题

请看一下我的代码,题目:输入正整数n,输出所有小于等于n的与7无关的数:不能被7整除,且其每一位数字都不等于7。

#include<iostream>
using namespace std;
int main(){
    int n,x=0,y=0,i;
    cin>>n;
    for(i=1;i<=n;i++){
        x=i;
        while(x!=0){ //拆数,此处出问题
        y=x%10;
        x=x*10;
        }
        if(i%7!=0&&y!=7){
            cout<<i<<" ";
        }

    }
    return 0;
}

例如我输入20,则输出1 2 3 4 5 6 8 9 10 11 12 13 15 16 17 18 19 20,带有17

c++
1

1个回答

你的拆数用了while循环,当输入两位数是肯定会出错啊。你想想,17为例,第一次循环17 % 10 得7,但x此时并不等于0,还要加一次循环,下一次循环y就不是7而是1了,这样子你的算法只满足一位数不满足两位数及以上。我觉得你可以在while循环里加个if判断,
if(y == 7)
{
break;
}
即当判断到数字中有7时直接跳出即可。

—————————————分割线————————————————
补充:修改后源码为:

#include<iostream>
using namespace std;
int main(){
    int n,x=0,y=0,i;
    cin>>n;
    for(i=1;i<=n;i++){
        x=i;
        while(x!=0){ //拆数,此处出问题
            y=x%10;
            if(y == 7)     //此处只要判断到有7就直接跳出即可
            {
                break;
            }
            //x=x*10;
            x = x / 10;//此处应该要用除,取余完个位后把个位除掉
        }
        if(i%7!=0&&y!=7){
            cout<<i<<" ";
        }
    }
    return 0;
}
2
weixin_42549874
柰茶 噢,看到了,while循环里你的“x = x *10”想表达的是?你的while循环的功能是对一个数取余,在"y = x %10"实现取余后,对x这个数的操作应该是"x = x / 10"而不是"x = x * 10",因为对于一个两位数或者多位数,对个位取了余后,接着应该往更高位取余,所以应该要除掉个位,接着才是对十位数百位数操作了。能理解吗?
4 个月之前 回复
Kevin_Sun_2007
Kevin_Sun_2007 不是70-79,是71 72 73 74 75 76 78 79
4 个月之前 回复
Kevin_Sun_2007
Kevin_Sun_2007 您好,如果我输入80,则输出了70-79,还是不对呀
4 个月之前 回复
weixin_42549874
柰茶 你看我在回答上的补充,能不能看懂,不懂可以追问~
4 个月之前 回复
weixin_42549874
柰茶 稍等。
4 个月之前 回复
weixin_42549874
柰茶 就这样,
4 个月之前 回复
Kevin_Sun_2007
Kevin_Sun_2007 c++小白,麻烦办法简单一些
4 个月之前 回复
Kevin_Sun_2007
Kevin_Sun_2007 那我可以用什么办法?
4 个月之前 回复
Kevin_Sun_2007
Kevin_Sun_2007 您好,用了您的方法后输入20,输出1 2 3 4 5 6
4 个月之前 回复
Csdn user default icon
上传中...
上传图片
插入图片
抄袭、复制答案,以达到刷声望分或其他目的的行为,在CSDN问答是严格禁止的,一经发现立刻封号。是时候展现真正的技术了!