|
马上注册,结交更多好友,享用更多功能^_^
您需要 登录 才可以下载或查看,没有账号?立即注册
x
#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;
}
本帖最后由 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:\[00.Exerciese.2022]\C>g++ -o x x.c
- D:\[00.Exerciese.2022]\C>x
- 906609 = 913 x 993
- D:\[00.Exerciese.2022]\C>
复制代码
|
|