这个程序应该打印由两个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;
}
答案 0 :(得分:1)
你必须将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=%s\n", i,j,ch);
break;
}
}
}
}
return 0;
}
答案 1 :(得分:0)
首先,你的格式是令人讨厌的不一致。全部缩进,并且它将更容易帮助。
第二个i
循环的测试显然是错误的。它应该运行多少次,它的停止条件应该是多少?从a
开始测试需要多少个值?
答案 2 :(得分:0)
我在您的代码中看到的错误:
a
的大小。你已宣布
int a[100000] = {};
但是,您尝试在其中设置900 x 900
= 810,000
个元素的值。那应该是
int a[SIZE] = {};
其中SIZE
为810,000
或更高。
在a[i] != NULL
声明中使用for
是不对的。你应该使用:
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;
}
答案 3 :(得分:0)
不需要2个循环和许多变量以及你制作的长数组 你的第二个循环终止条件也不正确。
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;
}