鱼C论坛

 找回密码
 立即注册
查看: 1367|回复: 7

求两个三位整数乘积构成的最大回文数

[复制链接]
发表于 2020-11-17 13:01:11 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能^_^

您需要 登录 才可以下载或查看,没有账号?立即注册

x
本帖最后由 超越大神 于 2020-11-17 14:52 编辑
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int i,j,k,flag=0,s;
  5.         for(i=998001;i>=10000;i--)
  6.         {
  7.             s=i;
  8.             j=0;
  9.                 while(s>0)
  10.                 {
  11.                         j=j*10+s%10;
  12.                         s=s/10;
  13.                 }
  14.                 if(j==s)//是回文数
  15.                 for(k=100;k<=999;k++)
  16.                 {
  17.                         if((j%k==0)&&(j/k>=100)&&(j/k<1000))
  18.                         {
  19.                                 flag=1;break;//回文数是否两个三位整数的乘积
  20.                         }
  21.                  }
  22.                  if(flag) break;
  23.         }
  24.         printf("%d,%d",i,k);
  25.         return 0;
  26. }
复制代码


感觉程序没错啊,但是不但回文数不对,k的值直接变为0
小甲鱼最新课程 -> https://ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2020-11-17 14:51:54 | 显示全部楼层
yijiejue
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 15:16:24 | 显示全部楼层
你这个题目有问题,从 10000 ~ 998001 ,回文数有很多,但没有一个回文数是两个三位数的乘积
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 18:26:24 | 显示全部楼层
风过无痕1989 发表于 2020-11-17 15:16
你这个题目有问题,从 10000 ~ 998001 ,回文数有很多,但没有一个回文数是两个三位数的乘积

咋没有啊
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 18:28:40 | 显示全部楼层

我程序有问题,有一行if哪一行写错了
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 19:18:59 | 显示全部楼层
超越大神 发表于 2020-11-17 18:28
我程序有问题,有一行if哪一行写错了

你举几个例子出来,哪两个三位数的相乘是一个回文数

下午的程序我已经删除掉了,你举出例子来,我再重写程序来验证
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

 楼主| 发表于 2020-11-17 19:45:36 | 显示全部楼层
风过无痕1989 发表于 2020-11-17 19:18
你举几个例子出来,哪两个三位数的相乘是一个回文数

下午的程序我已经删除掉了,你举出例子来,我再重 ...
  1. #include<stdio.h>
  2. int main(void)
  3. {
  4.         int i,j,k,flag=0,s;
  5.         for(i=998001;i>=10000;i--)
  6.         {
  7.             s=i;
  8.             j=0;
  9.                 while(s>0)
  10.                 {
  11.                         j=j*10+s%10;
  12.                         s=s/10;
  13.                 }
  14.                 if(j==i)//是回文数这一行本来写错了改过来了
  15.                 for(k=100;k<=999;k++)
  16.                 {
  17.                         if((j%k==0)&&(j/k>=100)&&(j/k<1000))
  18.                         {
  19.                                 flag=1;break;//回文数是否两个三位整数的乘积
  20.                         }
  21.                  }
  22.                  if(flag) break;
  23.         }
  24.         printf("%d,%d",i,k);
  25.         return 0;
  26. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

发表于 2020-11-17 21:32:29 | 显示全部楼层

上面的结论错误,我又重新写了一个

  1. #include<stdio.h>
  2. int main()
  3. {
  4.         int i, j, k,m = 0,sw, wa, qi, ba, sh, ge;

  5.         for (i = 998001;i >= 10000;i--)
  6.         {
  7.                 sw = i / 100000;
  8.                 wa = (i - sw * 100000) / 10000;
  9.                 qi = (i - sw * 100000 - wa * 10000) / 1000;
  10.                 ba = (i - sw * 100000 - wa * 10000 - qi * 1000) / 100;
  11.                 sh = (i - sw * 100000 - wa * 10000 - qi * 1000 - ba * 100) / 10;
  12.                 ge = i % 10;
  13.                 if (sw == ge && wa == sh && qi == ba)
  14.                 {
  15.                         /*                        printf("%d 是回文数\n", i);   */
  16.                         for (j = 999;j >= 100;j--)
  17.                         {
  18.                                 for (k = 999;k >= 100;k--)
  19.                                 {
  20.                                         if (i == j * k && k != m)     // 设置变量 m 的目的过滤重复(比如:1 x 2 与 2 x 1)
  21.                                         {
  22.                                                 m = j;
  23.                                                 printf("%d 是符合要求的回文数: %d = %d * %d\n", i, i, j, k);
  24.                                                 break;
  25.                                         }
  26.                                 }
  27.                         }
  28.                 }
  29. // 修改下面 else 语句的条件可以改变仅仅输出最大的一个,还是全部符合要求的回文数;
  30. // 如条件改为 sw == 0,则仅输出 6 位数的回文数
  31.                 else if(m != 0)
  32.                         break;
  33.         }
  34. }
复制代码
小甲鱼最新课程 -> https://ilovefishc.com
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2025-7-8 02:27

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表