由两个三位数的乘积构成的所有回文数
All palindrome numbers made from the product of two 3-digit numbers
这个程序应该打印所有由两个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
测试多少个值?
我在您的代码中看到的错误:
-
a
的大小。您已申报int a[100000] = {};
但是,您正在尝试设置其中
900 x 900
=810,000
元素的值int a[SIZE] = {};
其中CCD_ 6是CCD_。
-
在
for
语句中使用a[i] != NULL
是不对的。您应该使用:for (int i = 0; i < k; i++)
-
在检查数字是否为回文的
for
循环中,rever
从不重置。此外,rever
在使用之前不会被初始化。 -
打印回文数字的行需要在输出中添加一行换行符。否则,所有的数字都会变成一个很长的数字串。
这里有一个更新版本的修复:
#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;
}
相关文章:
- 如何在C++中从两个单独的for循环中添加两个数组
- 为什么两个不同的未命名名称空间可以共存于一个cpp文件中
- 当在同一名称空间中有两个具有相同签名的函数时,会发生什么
- 如何返回一个类的两个对象相加的结果
- 如何在C++中将一个无符号的 int 转换为两个无符号的短裤?
- 如何将两个不同矢量的同一位置的两个元素组合在一起
- 两个字符串在 c++ 中不相等
- 在两个类中共享相同的函数调用,并在不需要时避免空实例化
- C++:正在检查LinkedList中的回文-递归方法-错误
- 两个文件使用彼此的功能-如何解决
- 为什么Mat类的两个对象可以在不重载运算符+的情况下添加
- 将两个uint32_t转换为uint64_t,然后根据位模式而不是值变回双精度
- 两个实体之间的子弹碰撞回调
- 由两个三位数的乘积构成的所有回文数
- 使用XERCES合并两个DOM文档
- 求两个3位数乘积的最大回文数
- 不能在回文程序中输入多个字符串
- 最大的两位数回文
- 从cin读取两个字符串并将其写回时出现意外行为
- 需要算法来找到第n个回文数