<p>找<a href="https://stackoverflow.com/questions/555009/euler-problem-number-4?rq=1">here</a>找主意</p>
在C++中,我这样做:</p>
<pre><code>int euler004()
{
// A palindromic number reads the same both ways. The largest palindrome
// made from the product of two 2-digit numbers is 9009 = 91 99.
// Find the largest palindrome made from the product of two 3-digit numbers.
const int N=3;
const int N2=N<<1;
int min,max,a,b,c,i,j,s[N2],aa=0,bb=0,cc=0;
for (min=1,a=1;a<N;a++) min*=10; max=(min*10)-1;
i=-1;
for (a=max;a>=min;a )
for (b=a;b>=min;b )
{
c=a*b; if (c<cc) continue;
for (j=c,i=0;i<N2;i++) { s[i]=j%10; j/=10; }
for (i=0,j=N2-1;i<j;i++,j )
if (s[i]!=s[j]) { i=-1; break; }
if (i>=0) { aa=a; bb=b; cc=c; }
}
return cc; // cc is the output
}
</code></pre>
<ul>
<li>不需要sqrt。。。在</li>
<li>对<code>createPalindrome</code>的子调用会由于堆/堆栈垃圾而减慢速度</li>
<li>字符串操作<code>m = str(m) + str(m)[::-1]</code>很慢</li>
<li>如果您自己在固定大小的数组上执行字符串到int的转换,则可以更快</li>
<li>mine的实现大约运行1.7毫秒,但大部分时间是应用程序输出和格式化(AMD 3.2GHz 32位应用程序W7x64)。。。在</li>
</ul>
<p><strong>[edit1]实现公式</strong></p>
^{pr2}$
<ul>
<li>这需要~0.4毫秒</li>
</ul>
<p><strong>[edit2]进一步优化</strong></p>
^{3}$
<ul>
<li>这太快了,我无法正确测量时间(原始时间约为0.037毫秒)</li>
<li>从回文生成中删除除法和乘法</li>
<li>在等车的时候经过一些数值分析和思考后改变了范围</li>
<li>可以消除第一个循环(结果从9开始)</li>
</ul>