萌554 2024-03-04 22:39 采纳率: 100%
浏览 4
已结题

循环套循环之求回文数

求回文数之里面的循环套循环
这个while循环是怎么进行的呀,可以详细讲讲嘛
它是b满足什么条件的时候停止循环

img

  • 写回答

6条回答 默认 最新

  • a5156520 2024-03-05 09:29
    关注

    上面的代码,主要思路是先将m和n比较,将m修改为二者之中较小的数,n修改为二者之间较大的数,然后遍历区间m和n之间的每个整数,分别计算每个数的逆序数,循环结束再比较每个数和其逆序数是否相同,如果相同,则当前这个数就是回文数,然后就打印它的值。

    测试代码如下:

    #include <stdio.h>
    
    void hw(int m,int n){
        
        int t,i,a,b;
        
        // 这个if用于将m设置为m和n之间较小的数,n设置为m和n之间较大的数,这样方便后面for循环遍历m和n区间的每个整数 
        if(m>n){  
            t=m;
            m=n;
            n=t;
        }
        
        
        // 遍历区间m和n之间的每个整数 
        for(i=m;i<=n;i++){
            
            a=0;  // a用于存储当前整数i的逆序数,每次计算前赋值为0 
            b=i;  // 将b赋值为当前遍历到的整数i,以用于计算当前整数i的逆序数 
            while(b){  // 如果当前的整数b不为0,则循环提取b的剩余位上的整数,以计算i的逆序数,如果b为0,则退出while循环 
                
                a=a*10+b%10;  // 依次从b的个位提取到最高位,然后逐步组成i对应的逆序数,再赋值到到变量a中 
                b=b/10;  // b除以10,以便计算b的下一个数位上的数字 
                
            }
            
            if(a==i){  // 如果i的逆序数和i相等,则i是回文数,就打印i的值,如此即可打印出区间m和n之间的所有回文数 
                printf("回文数有%d\n",i);
            }
            
        }
        
    } 
    
    
    int main(void){
        
        int m,n;
        
        printf("请输入m和n的值:");
        scanf("%d%d",&m,&n);
        
        hw(m,n);
        
        return 0;
        
    }
    
    

    img

    本回答被题主选为最佳回答 , 对您是否有帮助呢?
    评论 编辑记录
查看更多回答(5条)

报告相同问题?

问题事件

  • 系统已结题 3月13日
  • 已采纳回答 3月5日
  • 创建了问题 3月4日