由两个三位数的乘积构成的所有回文数

All palindrome numbers made from the product of two 3-digit numbers

本文关键字:回文 两个 三位数      更新时间:2023-10-16

这个程序应该打印所有由两个3位数的乘积形成的回文数,但我在这个程序中没有得到。程序中的错误是什么。请帮忙。

#include <iostream>
using namespace std;
int main()
{
    int a[100000] = {};
    int b[5];
    int k = 0;
    int temp;
    int sum;
    int rever;
    int r;
    for (int i = 100; i <= 999; i++)
    {
        for (int j = 100; j <= 999; j++)
        {
            a[k] = i * j;
            k++;
        }
    }
    for (int i = 0; a[i] != NULL; i++)
    {
        temp = a[i];
        while (temp)
        {
            r = temp % 10;
            temp = temp / 10;
            rever = rever * 10 + r;
        }
        if (rever == a[i])
            cout << a[i];
    }
    return 0;
}

您必须将i从100循环到999,但j从i循环到999会导致231*952与952*231相同。使用字符串也更容易。

在C:

#include <stdio.h>
#include <string.h>
int main() {
    char ch[7], k, l;
    for (int i = 100; i < 1000; i++) {
        for (int j = i; j < 1000; j++) {
            sprintf(ch, "%d", i*j);
            l=strlen(ch)-1;
            k=0;
            while(ch[k++]==ch[l--]) {
                    if (k>=l) {
                            printf("%d*%d=%sn", i,j,ch);
                            break;
                    }
            }
        }
    }
    return 0;
}

首先,您的格式不一致。统一缩进,这样会更容易提供帮助。

对第二个i循环的测试显然是错误的。它应该运行多少次,它的停止条件应该是什么?它必须从a测试多少个值?

我在您的代码中看到的错误:

  1. a的大小。您已申报

    int a[100000] = {};
    

    但是,您正在尝试设置其中900 x 900=810,000元素的值

    int a[SIZE] = {};
    

    其中CCD_ 6是CCD_。

  2. for语句中使用a[i] != NULL是不对的。您应该使用:

    for (int i = 0; i < k; i++)
    
  3. 在检查数字是否为回文的for循环中,rever从不重置。此外,rever在使用之前不会被初始化。

  4. 打印回文数字的行需要在输出中添加一行换行符。否则,所有的数字都会变成一个很长的数字串。

这里有一个更新版本的修复:

#include <iostream>
using namespace std;
int main()
{
   const int SIZE = 810000;
   int a[SIZE] = {};
   int b[5];
   int k = 0;
   int temp;
   int sum;
   int r;
   for (int i = 100; i <= 999; i++)
   {
      for (int j = 100; j <= 999; j++)
      {
         a[k] =  i * j;
         k++;
      }
   }
   for (int i = 0; i < k; i++)
   {
      temp = a[i];
      int rever = 0;
      while (temp)
      {
         r =  temp % 10;
         temp = temp/10;
         rever = rever * 10 + r;
      }
      if (rever == a[i])
         cout << a[i] << endl;
   }
   return 0;
}

对于循环和这么多变量以及您制作的长数组,不需要2
另外,您的第二个for循环终止条件也不正确。

for(i=0;a[i]!=NULL;i++)

我们知道只有900个3位数字,所以我们可以在900 x 900(即810000 )终止循环

for(i=0;i<810000;i++)

问题陈述的解决方案。我发现了很多错误,所以我对它进行了编码。

#include <iostream>
#include <conio.h>
using namespace std;
int main()
{
int i,j;
long int number, reverse,temp;
for (i = 100; i <= 999; i++)
{
    for (j = 100; j <= 999; j++)
    {
        number = i*j;
        temp = number;
        reverse = 0;
        for (; temp != 0;)
        {
            reverse = reverse * 10;
            reverse = reverse + temp % 10;
            temp = temp / 10;
        }
        if (reverse == number)
            cout << number<<endl;

    }
}
_getch();
return 0;

}