请看一下我的代码,题目:输入正整数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;
}