我被困在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;
}

最佳答案

这样做是不对的,但还是不能养成习惯。我认为一个人可以轻而易举地解决前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;
}

关于c - 计算最高回文数,该回文数是两个3位数的乘积,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/18286551/

10-12 15:03