输出n~m中(0<n<m)能被3整除,且至少有一个数字是5的所有数???

#include<stdio.h>
main()
{int i,j,n,m;
scanf("%d,%d",&n,&m);
for(i=n+1;i<m;i++)
{
if(i%3==0)
{
do
{j=i%10;
if(j==5)
{printf("%d",i);break;}
i=i/10;
}while(i>0);
}
}
}
为什么输出不了啊

关键在于do-while循环中将外层循环控制变量i的值改变了,试想一下,当i=n+1时,一旦进入do循环,即进入每次除以10的循环中,直到i=0,然后就退出for循环,所输出不了。
修改:只要增加一个整形变量,如int num;
然后在do的前面添加一条指令:
num=i;
再将自此以下所有的i替换成num即可

修改后的整个代码如下
#include<iostream>
using namespace std;
int main()
{
int i,j,n,m;
int num;
scanf("%d,%d",&n,&m);
for(i=n+1;i<m;i++)
{
if(i%3==0)
{num=i;
do
{
j=num%10;
if(j==5)
{printf("\n%d",i);break;}
num=num/10;
}while(num>0);
}
}
return 0;
}
温馨提示:答案为网友推荐,仅供参考
第1个回答  2013-12-07
你的问题,是在循环体内,改变了i的值,导致整个循环逻辑出现错误。
for (i=n; i<m; i++)
{
if (i%3 != 0)
continue;

temp = i;
do
{
if (temp%10 == 5)
{
printf("%d", i);
break;
}
temp = temp/10;
} while (temp > 0);
}
第2个回答  2013-12-07
逻辑上有错误

i=4
i=4/10=0

i>0 退出循环
相似回答