gpt4 book ai didi

c - 欧拉计划 4 - 5 位回文数

转载 作者:太空宇宙 更新时间:2023-11-04 04:40:53 24 4
gpt4 key购买 nike

我的家庭作业必须解决 Project 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 位数字还是应该就这样保留它?

最佳答案

更改内部循环以执行 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++;
}

关于c - 欧拉计划 4 - 5 位回文数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26747861/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com