我正在尝试从数组中打印质数和回文数。它没有打印出任何我错的地方?!
#include <iostream>
#include <string>
using namespace std;
int main() {
int x, n, i, num, digit, rev=0;
int bar[100];
cout << "Cate numere trebuie sa fie in Array?:";
cin >> x;
for (i = 0; i < x; i++) {
cout << "bar[" << i << "]=";
cin >> bar[i];
}
for (i = 0; i < x; i++) {
num=bar[i];
do
{
digit = num % 10;
rev = (rev * 10) + digit;
num = num / 10;
} while (num != 0);
}
if (num == rev)
cout << num;
int y;
bool prim = true;
for (y = 2; y <= bar[i] / 2; ++y)
{
if (bar[i] % y == 0)
{
prim = false;
}
}
if (prim)
cout << bar[i];
return 0;
}
您必须在循环内进行输出。但是例如,此输出是在循环外部进行的
for (i = 0; i < x; i++) {
num=bar[i];
do
{
digit = num % 10;
rev = (rev * 10) + digit;
num = num / 10;
} while (num != 0);
}
if (num == rev) // <===
cout << num;
此外,以上if语句中的比较不正确。在do-while循环之后,num的值等于0。您需要编写
if (bar[i] == rev) // <===
cout << num;
而且素数的输出也可以在循环外进行。此外,您错误地确定了质数。例如,根据您的算法,1
是质数。
同样在第一个循环中,您也必须将变量rev初始化为0。
可以通过以下方式编写程序
#include <iostream>
int main()
{
const size_t N = 100;
int bar[N];
cout << "Cate numere trebuie sa fie in Array?: ";
size_t n = 0;
std::cin >> n;
if ( N < n ) n = N;
for ( size_t i = 0; i < n; i++ )
{
std::cout << "bar[" << i << "] = ";
std::cin >> bar[i];
}
std::cout << '\n';
for ( size_t i = 0; i < n; i++ )
{
const int Base = 10;
int num = bar[i];
int rev = 0;
do
{
int digit = num % Base;
rev = rev * Base + digit;
} while ( num /= Base );
if ( bar[i] == rev ) std::cout << bar[i] << ' ';
}
std::cout << '\n';
for ( size_t i = 0; i < n; i++ )
{
bool prime = bar[i] % 2 == 0 ? bar[i] == 2 : bar[i] != 1;
for ( int j = 3; prime && j <= bar[i] / j; j += 2 )
{
prime = bar[i] % j != 0;
}
if ( prime ) std::cout << bar[i] << ' ';
}
std::cout << '\n';
return 0;
}
其输出可能是
Cate numere trebuie sa fie in Array?: 10
bar[0] = 121
bar[1] = 11
bar[2] = 131
bar[3] = 13
bar[4] = 143
bar[5] = 14
bar[6] = 1551
bar[7] = 10
bar[8] = 1234321
bar[9] = 99
121 11 131 1551 1234321 99
11 131 13