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%10
4)
{
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 逐位递减

收获:fb93c7e13aa6d0ac7d438b059ed78f05
之所以显示未定义,是因为four是在while循环内定义的

posted @ 2025-06-30 15:48  ervgiu28hg34y827  阅读(5)  评论(0)    收藏  举报