我必须在Euler项目网站上为我的家庭作业解决问题4:
最大回文乘积
回文数字的读取方式是相同的。由两位数乘积而成的最大回文数为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位数来修理吗?还是我应该把它留在那里呢?
发布于 2014-11-05 06:03:55
更改内部循环以执行digits/2测试。
使用num[10],数字的数目可以是1到10。
// As int is good to _at least_ 32k, use long
// long is good to _at least_ 2M
long n = (long)i * j;
long temp = n;
do {
...
} while(temp!=0);
bool same = true;
for (int a=0; a<digits/2; a++) {
if (num[a] != num[digits-1-a]) same = false;
}
if (same) {
palindrome[k]=n;
k++;
}https://stackoverflow.com/questions/26747861
复制相似问题