我已经为欧拉计划的问题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/

10-11 22:54
查看更多