为什么我用break不能达到同样的效果
#include <stdio.h>int main()
{
int i, j, target, invert = 0, num = 998001; // 999 * 999
for ( ; num > 10000; num--)
{
// 先求倒置数
target = num;
invert = 0;
while (target)
{
invert = invert * 10 + target % 10;
target = target / 10;
}
// 如果跟倒置数一致,说明该数是回文数
if (invert == num)
{
for (i = 100; i < 1000; i++)
{
if (!(num % i) && (num / i >= 100) && (num / i < 1000))
{
break;//终止for循环,执行if语句
//goto FINDIT;
}
}
}
break;//if语句执行完,执行for语句下面内容break;终止for循环
}
printf("结果是%d == %d * %d\n", num, i, num / i);//输出结果
//FINDIT: printf("结果是%d == %d * %d\n", num, i, num / i);
return 0;
}
参考答案
#include <stdio.h>
int main()
{
int i, j, target, invert = 0, num = 998001; // 999 * 999
for ( ; num > 10000; num--)
{
// 先求倒置数
target = num;
invert = 0;
while (target)
{
invert = invert * 10 + target % 10;
target = target / 10;
}
// 如果跟倒置数一致,说明该数是回文数
if (invert == num)
{
for (i = 100; i < 1000; i++)
{
if (!(num % i) && (num / i >= 100) && (num / i < 1000))
{
goto FINDIT;
}
}
}
}
FINDIT: printf("结果是%d == %d * %d\n", num, i, num / i);
return 0;
} #include <stdio.h>
int main()
{
int i, j, target, invert = 0, num = 998001; // 999 * 999
int flag = 0;
for ( ; num > 10000; num--)
{
// 先求倒置数
target = num;
invert = 0;
while (target)
{
invert = invert * 10 + target % 10;
target = target / 10;
}
// 如果跟倒置数一致,说明该数是回文数
if (invert == num)
{
for (i = 100; i < 1000; i++)
{
if (!(num % i) && (num / i >= 100) && (num / i < 1000))
{
flag=1;
break;//终止for循环,执行if语句
//goto FINDIT;
}
}
}
if (flag) break;//if语句执行完,执行for语句下面内容break;终止for循环
}
printf("结果是%d == %d * %d\n", num, i, num / i);//输出结果
//FINDIT: printf("结果是%d == %d * %d\n", num, i, num / i);
return 0;
}
ba21 发表于 2022-9-7 21:40
#include
int main()
为什么第二个break前面要加if(flag),无条件执行不也能退出循环吗?上面for (i = 100; i < 1000; i++)没执行完,会向下执行吗 本帖最后由 jackz007 于 2022-9-7 22:54 编辑
C 是结构化编程语言,必须绝对禁止使用 goto 语句
#include <stdio.h>
// 判断 m 是否回文数
int foo(int m)
{
int d , n , r ;
for(n = m , d = r = 0 ; n ; n /= 10) d = d * 10 + n % 10 ;
if(d == m) r = 1 ;
return r ;
}
// 判断 m 是否回文数,并且,判断 m 是否可以被分解为两个三位数的乘积
int check(int m , int * q)
{
int d , r ;
* q = r = 0 ;
if(foo(m)) {
for(d = 100 ; d < 1000 ; d ++) {
if(! (m % d) && && m / d > 99 && m / d < 1000) {
r = 1 ;
* q = d ;
break ;
}
}
}
return r ;
}
int main(void)
{
int d , k ;
for(k = 998001 ; k > 10000 ; k --) {
if(check(k , & d)) {
printf("%d = %d x %d\n" , k , d , k / d) ;
break ;
}
}
}
编译、运行实况:
D:\\C>g++ -o x x.c
D:\\C>x
906609 = 913 x 993
D:\\C> 本帖最后由 jhq999 于 2022-9-8 06:35 编辑
{:5_109:}
页:
[1]