坦然自若 发表于 2019-7-23 11:17:19

第一阶段考核找出最大的回文数,并且是由两个三位数相乘

本帖最后由 坦然自若 于 2019-7-23 11:19 编辑

#include <stdio.h>

int main()

{
      int i, j, target, invert, num;   //i是较大的那个三位数,j是较小的三位数
      for (i = 999; i >= 100; i--)   
      {
                for (j = 999; j >= 100; j--)
                {
                        //求倒置数
                        target = i * j;
                        num = target;
                        invert = 0;
                        while (target)
                        {
                              invert = invert + target % 10;
                              target /= 10;
                        }                                          
                        if (num == invert)                           //如果倒置数和原数一样用goto语句跳出循环
                        {
                              goto findit;
                        }
                }


      }
findit: printf("%d*%d=%d\n", i, j, num);

      return 0;
}


不知道哪里错了,恳请哪位大神帮忙

一木之禾 发表于 2019-7-23 11:17:20

本帖最后由 一木之禾 于 2019-7-23 11:44 编辑

我看来有两个问题,首先,invert你是想保存倒置的数,那样的话,每次加上target的末位数之前,应该先乘以10来达到移位。
其次,根据修改过上面这个问题之后的程序的结果来看,答案还是不对,原因是原数末尾可能是0,倒置之后再判断是否回文就显然不对了。至于怎么判断回文,你再思考思考。
另外,以后提问还是应该把代码放在代码框里,注意代码规范。
while(target){
                invert = invert +target % 10;
                invert = invert*10;
                target /=10;
        }

坦然自若 发表于 2019-7-23 11:17:57

求哪位大神帮忙    {:5_92:} please~~

坦然自若 发表于 2019-7-23 11:56:03

感谢大神,又是您啊,非常感谢,对了大神怎么发代码呢

坦然自若 发表于 2019-7-23 12:09:25

一木之禾 发表于 2019-7-23 11:17
我看来有两个问题,首先,invert你是想保存倒置的数,那样的话,每次加上target的末位数之前,应该先乘以10 ...

while(target){
                invert = invert * 10;
                invert = invert + target % 10;
                target /=10;
      }
大神我懂了,先乘10,可是这样也得不出正确结果

坦然自若 发表于 2019-7-23 12:16:06

本帖最后由 坦然自若 于 2019-7-23 12:18 编辑

一木之禾 发表于 2019-7-23 11:17
我看来有两个问题,首先,invert你是想保存倒置的数,那样的话,每次加上target的末位数之前,应该先乘以10 ...

大神我终于懂了,原来我这种是两个三位数其中一个为最大(可能比正确结果还大),另一个不能保证为最大(可能比正确结果小),这样求出的回文数不一定为最大。只能先找回文数,在确定它是否是两个三位数相乘

一木之禾 发表于 2019-7-23 14:34:59

坦然自若 发表于 2019-7-23 11:56
感谢大神,又是您啊,非常感谢,对了大神怎么发代码呢

编辑框那里有个和长得这个<>样子的符号,点一下,出来个弹框,代码直接粘进去就好了。
啊哈哈,我也就能解决点基本点的c的问题了,C也没学太深,计科专业学生党

坦然自若 发表于 2019-7-23 15:41:50

一木之禾 发表于 2019-7-23 14:34
编辑框那里有个和长得这个样子的符号,点一下,出来个弹框,代码直接粘进去就好了。
啊哈哈,我也就能解 ...

ok,谢谢大神{:10_256:}
页: [1]
查看完整版本: 第一阶段考核找出最大的回文数,并且是由两个三位数相乘