17~~
int n,i,tmp;//位数
scanf("%d",&n);
for(i=1;i<=n;i++)
{
if(i%40)
continue;
int four =0;//用来标记是否含有4
tmp=i;
while(tmp>0)
{
if(tmp%104)
{
four=1;
break;// 不应该用continue, break跳出while循环
}
tmp/=10;//排除个位,检查更高位
}
if(four==0)
printf("%d\n",i);
}
bug:在while循环中,你执行了i /= 10直接修改了 for循环的迭代变量 i 。
用临时变量tmp复制 i,避免修改 i本身。
死循环问题while(1)无法退出,你的while(1)里,每次都会把tmp重新赋值为 i( tmp = i )导致:
tmp /= 10的修改会被下一次 tmp = i覆盖,陷入无限循环(比如 i=12 会永远检查个位 2 )
修复死循环:将while(1) 改为while(tmp > 0) ,并在循环外只赋值一次 tmp = i ,让 tmp 逐位递减
收获:
之所以显示未定义,是因为four是在while循环内定义的
浙公网安备 33010602011771号