超越大神 发表于 2020-11-17 13:01:11

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

本帖最后由 超越大神 于 2020-11-17 14:52 编辑

#include<stdio.h>
int main(void)
{
        int i,j,k,flag=0,s;
        for(i=998001;i>=10000;i--)
        {
            s=i;
            j=0;
                while(s>0)
                {
                        j=j*10+s%10;
                        s=s/10;
                }
                if(j==s)//是回文数
                for(k=100;k<=999;k++)
                {
                        if((j%k==0)&&(j/k>=100)&&(j/k<1000))
                        {
                                flag=1;break;//回文数是否两个三位整数的乘积
                        }
               }
               if(flag) break;
        }
        printf("%d,%d",i,k);
        return 0;
}

感觉程序没错啊,但是不但回文数不对,k的值直接变为0

超越大神 发表于 2020-11-17 14:51:54

yijiejue

风过无痕1989 发表于 2020-11-17 15:16:24

你这个题目有问题,从 10000 ~ 998001 ,回文数有很多,但没有一个回文数是两个三位数的乘积

超越大神 发表于 2020-11-17 18:26:24

风过无痕1989 发表于 2020-11-17 15:16
你这个题目有问题,从 10000 ~ 998001 ,回文数有很多,但没有一个回文数是两个三位数的乘积

咋没有啊

超越大神 发表于 2020-11-17 18:28:40

超越大神 发表于 2020-11-17 18:26
咋没有啊

我程序有问题,有一行if哪一行写错了

风过无痕1989 发表于 2020-11-17 19:18:59

超越大神 发表于 2020-11-17 18:28
我程序有问题,有一行if哪一行写错了

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

下午的程序我已经删除掉了,你举出例子来,我再重写程序来验证

超越大神 发表于 2020-11-17 19:45:36

风过无痕1989 发表于 2020-11-17 19:18
你举几个例子出来,哪两个三位数的相乘是一个回文数

下午的程序我已经删除掉了,你举出例子来,我再重 ...

#include<stdio.h>
int main(void)
{
      int i,j,k,flag=0,s;
      for(i=998001;i>=10000;i--)
      {
            s=i;
            j=0;
                while(s>0)
                {
                        j=j*10+s%10;
                        s=s/10;
                }
                if(j==i)//是回文数这一行本来写错了改过来了
                for(k=100;k<=999;k++)
                {
                        if((j%k==0)&&(j/k>=100)&&(j/k<1000))
                        {
                              flag=1;break;//回文数是否两个三位整数的乘积
                        }
               }
               if(flag) break;
      }
      printf("%d,%d",i,k);
      return 0;
}

风过无痕1989 发表于 2020-11-17 21:32:29

超越大神 发表于 2020-11-17 19:45


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

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

        for (i = 998001;i >= 10000;i--)
        {
                sw = i / 100000;
                wa = (i - sw * 100000) / 10000;
                qi = (i - sw * 100000 - wa * 10000) / 1000;
                ba = (i - sw * 100000 - wa * 10000 - qi * 1000) / 100;
                sh = (i - sw * 100000 - wa * 10000 - qi * 1000 - ba * 100) / 10;
                ge = i % 10;
                if (sw == ge && wa == sh && qi == ba)
                {
                        /*                        printf("%d 是回文数\n", i);   */
                        for (j = 999;j >= 100;j--)
                        {
                                for (k = 999;k >= 100;k--)
                                {
                                        if (i == j * k && k != m)   // 设置变量 m 的目的过滤重复(比如:1 x 2 与 2 x 1)
                                        {
                                                m = j;
                                                printf("%d 是符合要求的回文数: %d = %d * %d\n", i, i, j, k);
                                                break;
                                        }
                                }
                        }
                }
// 修改下面 else 语句的条件可以改变仅仅输出最大的一个,还是全部符合要求的回文数;
// 如条件改为 sw == 0,则仅输出 6 位数的回文数
                else if(m != 0)
                        break;
        }
}
页: [1]
查看完整版本: 求两个三位整数乘积构成的最大回文数