1

我被困在 Euler#4 上,它是通过两个 3 位数字的乘积来计算最高回文数。我得到的答案总是 0。显然需要帮助。

#include <stdio.h>
#include <conio.h>

int main()
{
    int i,j,h=0,m=0,p=0;

    clrscr();

    for(i=100;i<1000;i++)
    {
        for(j=100;j<1000;j++)
        {
            p=i*j;
            h=p/100000;
            m=p%10;

            if(h==m)
            {
                h=(p/10000)%10;
                m=(p/10)%10;

                if(h==m)
                {
                    h=(p/1000)%10;
                    m=(p%1000)/100;

                    if(h==p)
                    {
                        printf("%d\n",p);
                    }
                }
            }
        }
    }

    return 0;
}
4

1 回答 1

1

这样做是错误的,但仍然不要养成习惯。我认为一个人可以轻松解决前 50 个问题。

#include <stdio.h>

static int is_palindromic(unsigned int n);

int main(void)
{
  unsigned int i, j, max = 0;
  for (i = 100; i <= 999; i++) {
    for (j = 100; j <= 999; j++) {
      unsigned int p = i*j;
      if (is_palindromic(p) && p > max) {
        max = p;
      }
    }
  }
  printf("%u\n", max);
  return 0;
}

int is_palindromic(unsigned int n)
{
  unsigned int reversed = 0, t = n;

  while (t) {
    reversed = 10*reversed + (t % 10);
    t /= 10;
  }
  return reversed == n;
}
于 2013-08-17T08:17:04.590 回答