当前位置:  开发笔记 > 编程语言 > 正文

找到两个三位数字产品的最大回文问题

如何解决《找到两个三位数字产品的最大回文问题》经验,为你挑选了1个好方法。

所以在Project Euler上,问题4陈述如下:

回文数字两种方式相同.由两个2位数字的乘积制成的最大回文是9009 = 91 99.

找到由两个3位数字的乘积制成的最大回文.

我尝试过以下方法:

    #include 
    #include 

    int check(int result)
    {
        char b[7];
        sprintf(b, "%d", result);
        if (b[0] == b[5] && b[1] == b[4] && b[2] == b[3])
        {
            return 1;
        }
        else 
        {
            return 0;
        }
    }

    int main () {
        int i;
        int g;
        int final;
        for (i = 999; i > 99; i--)
        {
            for (g = 999; g > 99; g--)
            {
                if (check(g*i) == 1)
                {
                    final = g*i;
                    goto here;
                }
            }
        }
        here:
        printf("%d", final);
}

但是,这不起作用.而不是正确的答案,我得到580085,我认为至少是回文,但仍然不是正确的答案.

让我解释一下我的程序int main:

    int iint g是我的乘数.它们是两个三位数字.

    int final 是存储最大回文数的数字.

    我开始两个for循环,以获得每个数字的可能性.

    当达到第一个回文时,我使用goto离开循环(可能不应该,但它不会影响像这样的小程序).

    第一回文应该是最重要的回归,因为我从顶部开始倒计时.

现在让我解释一下我的检查:

    首先,因为这是两个三位数相乘,以确定一个char需要保持该值的大小我去了一个计算器并乘以999*999然后它最终为6然后我需要添加一个因为我发现从我之前发布的一个问题出发,sprintf将一个\0角色放在最后.

    好的,现在我有了一个char和all,我复制了result(i*gin in int main)并把它放入char b[7].

    然后我只是b通过硬编码我需要检查的每个插槽来检查它是否与自己相等.

    然后我相应地返回,1为真,2为假.

这对我来说似乎是完全合乎逻辑的,但是,它并不适用于一些奇怪的原因.任何提示?



1> Emilio Silva..:

这个假设是错误的:

第一回文应该是最重要的回归,因为我从顶部开始倒计时.

999*100 = 99900之前会检查998*101 = 100798,所以很明显你不能指望它.

推荐阅读
周扒pi
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有