【发布时间】:2017-02-24 13:17:45
【问题描述】:
我正在尝试编写一个代码显示所有具有以下特征的数字:
数字本身是质数。
对于从右侧删除的每个数字,剩余的数字仍应为质数。
以数字 293 为例:293 本身是质数,如果我们删除右边的数字,我们有 29,它仍然是一个质数,如果我们再次删除右边的数字,我们有 2,它仍然是质数。
我正在尝试编写一个代码,从用户那里获取整数 nshow),返回向量v。
如果n=1 那么它只显示数字 2-3-5-7... 如果n!=1 它应该调用show(n-1) 并将所有生成的数字乘以 10 并将它们与奇数相加.. . 然后它应该检查新数字是否是素数。如果是这样,则应将其添加到向量中。
我的问题是代码仅适用于n=1。这是我的代码:
#include <iostream>
#include <cmath>
#include <vector>
#include <algorithm>
#include <iterator>
using namespace std;
bool isPrime(int a)
{
int i, p = 0;
if (a == 1)
return false;
else
{
for (i = a - 1; i > sqrt(a); i--)
if (a % i == 0)
p++;
if (p != 0)
return false;
else
return true;
}
}
vector<int> show(int n)
{
vector<int> v;
int i, j;
if (n == 1)
{
v.push_back(2);
v.push_back(3);
v.push_back(5);
v.push_back(7);
}
else
{
show(n - 1);
if (n != 1)
for (i = 0; i < v.size(); i++)
{
for (j = 1; j <= 9; j += 2)
if (isPrime((v.at(i) * 10) + j))
v.at(i) = (v.at(i) * 10) + j;
}
}
return v;
}
int main()
{
int n, s = 0, i;
cin >> n;
show(n);
for (i = 0; i < show(n).size(); i++)
cout << show(n).at(i) << endl;
system("pause");
return 0;
}
【问题讨论】:
-
听起来您可能需要学习如何使用调试器来单步调试您的代码。使用好的调试器,您可以逐行执行您的程序,并查看它与您期望的偏差在哪里。如果您要进行任何编程,这是必不可少的工具。延伸阅读:How to debug small programs
-
您确实应该将
show的返回值保存在main中,而不是计算素数n+2次。