我已经为欧拉计划的问题4创建了一个解决方案。
然而,我发现将print语句(打印答案)放在不同的位置会打印不同的答案。由于某种原因,结果的最高值是580085。不是906609吗?我的isparandrome()方法有问题吗?
#include <stdio.h>
#include <stdbool.h>
int isPalindrome(int n);
//Find the largest palindrome made from the product of two 3-digit numbers.
int main(void)
{
int i = 0;
int j = 0;
int result = 0;
int palindrome = 0;
int max = 0;
//Each iteration of i will be multiplied from j:10-99
for(i = 100; i <= 999; i++)
{
for(j = 100; j <= 999; j++)
{
result = i * j;
if(isPalindrome(result) == 0)
{
//printf("Largest Palindrome: %d\n", max); //906609
//printf("Result: %d\n", result); //580085
if(result > max)
{
max = result;
//printf("Largest Palindrome: %d\n", max); //927340
}
printf("Largest Palindrome: %d\n", max); //906609
}
}
}
//printf("Largest Palindrome: %d\n", max); //998001
system("PAUSE");
return 0;
} //End of main
//Determines if number is a palindrome
int isPalindrome(int num)
{
int n = num;
int i = 0;
int j = 0;
int k = 0;
int count = 0;
int yes = 0;
//Determines the size of numArray
while(n/10 != 0)
{
n%10;
count++;
n = n/10;
}
int numArray[count];
//Fill numArray with each digit of num
for(i = 0; i <= count; i++)
{
numArray[i] = num%10;
//printf("%d\n", numArray[i]);
num = num/10;
}
//Determines if num is a Palindrome
while(numArray[k] == numArray[count])
{
k = k + 1;
count = count - 1;
yes++;
}
if(yes >= 3)
{
return 0;
}
}//End of Function
最佳答案
我记得不久前我做过那个问题,我只是做了一个is_palindrome()
函数并用brute强制它。我从999*999开始测试。
我检测回文的方法和你的完全不同。我将把给定的数字转换成一个字符串,并将第一个字符与第n个字符进行比较,第二个字符与n-1进行比较,以此类推。
这很简单(而且可能效率也很低),但答案会“立即”出现。
关于c - 欧拉计划问题4,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/7000168/