关于自己写的代码 如何跳出出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 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
另外如何发带有灰色边框行数的代码呀,小白不大会
在发贴的编辑框图标中有个 <> 符号,点一下就可以把代码粘贴进去,发出来就是带行号的代码格式了 chxchxkkk 发表于 2020-3-23 10:02
在发贴的编辑框图标中有个符号,点一下就可以把代码粘贴进去,发出来就是带行号的代码格式了
谢谢了 sunrise085 发表于 2020-3-22 20:20
之所以跳不出循环,是因为你把num-=1写在else中了。
在你的程序中,一旦找到一个回文数,就会进入if(j==nu ...
谢谢dl,我思考了很久只是找到了错误点,还是结构的问题
页:
[1]