注册 登录
编程论坛 C语言论坛

请问下这题y=y/10有什么用

gqdbsfc 发布于 2022-02-09 11:05, 1879 次点击
题目:查找1到一百内含有3和7的所有整数

#include <stdio.h>
int find(int y)
{
    int a,flag=0;
    while(y!=0){
        a=y%10;
        if((a==3)||(a==7)){
            flag=1;
            break;
            
        }
         y=y/10;
        
    }
    return flag;
}
    int main(){
        int x,n=0;
        for(x=1;x<100;x++){
        
         if(find(x)){
             printf("%d",x);
            
         }
    }
   
   
   
return 0;   
}
7 回复
#2
rjsp2022-02-09 13:47
假如 y = abc 这个三位数
y = y/10 之后,y就是 ab 了

y = ab 之后
再一次执行 y = y/10 后,y 就是 a 了

y = a 之后
再一次执行 y = y/10 后,y 就是 0 了
#3
rjsp2022-02-09 14:06
查找1到一百内含有37的所有整数

if((a==3)||(a==7)){

到底是“含有37”,还是“含有37”?我怀疑你题目写错了,“含有3和7”且在[0,100]区间的数只有37一个。

程序代码:
#include <stdio.h>

_Bool foo( int n )
{
    for( ; n!=0 && n%10!=3 && n%10!=7; n/=10 );
    return n!=0;
}

int main( void )
{
    for( int i=1; i<=100; ++i )
    {
        if( foo(i) )
            printf( "%d\n", i );
    }
}
#4
gqdbsfc2022-02-09 14:15
回复 2楼 rjsp
这题好像只要找到1到100间的数,,我试过把那句删了,运行后什么也不会显示
#5
rjsp2022-02-09 15:43
回复 4楼 gqdbsfc
你删掉 y=y/10 后,那个 while就是死循环了呀,当然什么都不输出。
(严格来讲,这种无副作用的死循环,属于“未定义行为”,也就是不保证任何输出,包括不保证一定没有输出。)
#6
闲客一位2022-02-13 11:15
回复 楼主 gqdbsfc
y=y/10没有了,y就一直不会变啊,如果if不执行,没有break出来,while就会一直执行啊。
#7
不会游泳的虾2022-02-14 09:51
while (y != 0) {  //这段代码的功能是:将整数 y 分别取它的 个 十 百 。。。位数值,再进行比较判断
    a = y % 10;  //取得个位数值
    if ((a == 3) || (a == 7)) {
        flag = 1;
        break;
    }
    y = y / 10;//缩小十倍,去掉个位数值
}
比如:y = 1234;
while (y != 0)条件成立 ,进入循环。
       a = y % 10 = 1234 % 10 = 4;
      if () {} 判断
      y = y /10 , y = 1234/10 = 123
回到 while(y!=0) 此时 y = 123 != 0  条件成立 继续循环
     a = y % 10 = 123 % 10 = 3
    if () {} 判断
    y = y / 10, y = 123 / 10 = 12
以此类推,直到 y == 0 时退出while()循环。
#8
nosnoy2022-02-14 11:20
y/10与y%10的结合是判定每一位的数据是否为3或7;
int find(int y)
{
    int a,flag=0;
    while(y!=0){
        a=y%10;
        if((a==3)||(a==7)){
            flag=1;
            break;
            
        }
         y=y/10;
        
    }
    return flag;
}
上面程序可以理解为 y%10先判断个位数据
y/10以十进制向右移位(消去个位数据)
一直循环
直至个位数为0 跳出循环
1