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

你的拆数用了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;
}