Justin1 发表于 2020-3-22 20:20:30

关于自己写的代码 如何跳出出for 语句的问题

本帖最后由 Justin1 于 2020-3-22 20:20 编辑

#include<stdio.h>

int main()
{
      long int a,b,num,i,j;
      _Bool flag = 1;
      
      num = 998001;
      do
      {
                i = num;
            j = 0;
                while(i)
                {
                        j = j * 10 + i % 10;
            i = i / 10;      
                }
                if (j==num)
                {
                        for ( a = 999 ; a>100; a-- )
                        {
                              if ( !(num % a) && (num / a >= 100) && (num / a < 1000) )
                              {
                                        goto FINDIT;
                              }
                              
                        }
                }
                else
                {
                        num -=1;
                }
            
      }
      while (flag);
      
FINDIT: printf("结果是%d == %d * %d\n", num, a, num/a);      
      
      return 0;
               
}



题目要求找出最大的回文数,并且是由两个三位数相乘。我们不妨先求出两个最大的三位数 999 * 999 的乘积,然后逐个递减判断是否回文数。

甲鱼的答案我看懂了,但是自己的这部分弄了一个小时知道哪里错了,但不会改。

应该是   最里面的for 循环挑不出来的缘故

sunrise085 发表于 2020-3-22 20:20:31

本帖最后由 sunrise085 于 2020-3-22 21:09 编辑

之所以跳不出循环,是因为你把num-=1写在else中了。
在你的程序中,一旦找到一个回文数,就会进入if(j==num)模块,若该回文数不符合条件(不是两个三位数乘积),则不会执行goto语句,但是因为进入了if语句块则不会进入else语句块,那样num则不会在改变,会一直在while内循环,进入了死循环。

发代码:在发帖界面,上方有各种功能,有一个像是'<>'的按钮,是用来发代码的。

另外C语言中尽量少用goto语句。你的程序完全可以使用break跳出来。
#include<stdio.h>
int main()
{
        long int a,b,num,i,j;
        _Bool flag = 1;
        num = 998001;
        do
        {
                i = num;
                j = 0;
                while(i)
                {
                        j = j * 10 + i % 10;
                        i = i / 10;      
                }
                if (j==num)
                {
                        for ( a = 999 ; a>100; a-- )
                        {
                                if ( !(num % a) && (num / a >= 100) && (num / a < 1000) )
                                {
                                        flag=0;
                                        break;
                                }
                        }
                }
                num -=1;
        }while (flag);
        printf("结果是%d == %d * %d\n", num+1, a, (num+1)/a);      
        return 0;
}

Justin1 发表于 2020-3-22 20:21:07

另外如何发带有灰色边框行数的代码呀,小白不大会

chxchxkkk 发表于 2020-3-23 10:02:41

Justin1 发表于 2020-3-22 20:21
另外如何发带有灰色边框行数的代码呀,小白不大会

在发贴的编辑框图标中有个 <> 符号,点一下就可以把代码粘贴进去,发出来就是带行号的代码格式了

Justin1 发表于 2020-3-23 10:28:46

chxchxkkk 发表于 2020-3-23 10:02
在发贴的编辑框图标中有个符号,点一下就可以把代码粘贴进去,发出来就是带行号的代码格式了

谢谢了

Justin1 发表于 2020-3-23 10:31:17

sunrise085 发表于 2020-3-22 20:20
之所以跳不出循环,是因为你把num-=1写在else中了。
在你的程序中,一旦找到一个回文数,就会进入if(j==nu ...

谢谢dl,我思考了很久只是找到了错误点,还是结构的问题
页: [1]
查看完整版本: 关于自己写的代码 如何跳出出for 语句的问题