【发布时间】:2014-11-05 00:43:25
【问题描述】:
我必须在 Project Euler 网站上解决问题 4 以完成作业:
最大回文积
回文数的两种读法相同。由两个 2 位数乘积构成的最大回文数是 9009 = 91 × 99。
找出由两个 3 位数乘积构成的最大回文数。
#include <stdio.h>
int main()
{
int i,j,palindrome[1000],n,temp,k=0,num[10],max,digits;
for(i=999;i>=320;i--)
{
for(j=999;j>=320;j--)
{
n=i*j;
temp=n;
digits=0;
do
{
num[digits]=temp%10;
temp/=10;
digits++;
}
while(temp!=0);
if(num[0]==num[5] && num[1]==num[4] && num[2]==num[3])
{
palindrome[k]=n;
k++;
}
}
}
max=palindrome[0];
for(i=1;i<k;i++)
{
if(palindrome[i]>=max)
max=palindrome[i];
}
printf("%d\n",max);
}
我得到了正确答案,但我的代码仅适用于 6 位数字,它应该检查从 100*100(10000,5 位)到 999*999(998001,6 位)的数字。
我的代码检查从 320*320 到 999*999。
那么它可以修复为使用 5 位数字还是我应该这样保留它?
【问题讨论】:
-
i*j对于更大的数字来说太大了,int无法处理;请改用unsigned int或unsigned long long。 -
似乎重复的问题 - stackoverflow.com/questions/24772179/…
-
回文数组没有意义;只保留你找到的最大的(并记录最后打印出来的因素)。您还应该测试 5 位数字以正确解决问题,(但最大的显然有 6 位数字)。
-
@UncleO 你说得对,这个数组毫无意义,我只能找到 max 并将其放入变量中
-
您还不必要地检查产品两次。内循环应该是
for(j=999;j>=i;j--)
标签: c palindrome