首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >项目Euler 4-5位回文

项目Euler 4-5位回文
EN

Stack Overflow用户
提问于 2014-11-05 00:43:25
回答 1查看 183关注 0票数 2

我必须在Euler项目网站上为我的家庭作业解决问题4:

最大回文乘积

回文数字的读取方式是相同的。由两位数乘积而成的最大回文数为9009 = 91×99.

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

代码语言:javascript
复制
#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位数来修理吗?还是我应该把它留在那里呢?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-05 06:03:55

更改内部循环以执行digits/2测试。

使用num[10],数字的数目可以是1到10。

代码语言:javascript
复制
        // 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++;
        }
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/26747861

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档