【发布时间】:2021-04-17 21:34:31
【问题描述】:
我正在尝试编写一个 c++ 程序,它从用户那里获取一个整数 n (n>=1 && n
#include <iostream>
using namespace std;
bool isPrime(int n)
{
if(n <= 1)
return false;
for(int i = 2; i <= (n/2); i++)
if(n % i == 0)
return false;
return true;
}
int main()
{
long int n;
int b = 0;
cin>>n;
while(n >= 1 && n <= 100000){
b += n % 10;
n /= 10;
}
for(int i = n, counter = b; counter <= 10; i++)
if(isPrime(i)){
counter++;
if(i > n)
cout<<counter<<"th prime number after n is : "<<i<<endl;
}
return 0;
}
因此,根据@Bob__ 的回答(并将其转换为我在初始代码中使用的代码样式),我的问题的可能解决方案之一如下:
#include <iostream>
using namespace std;
bool isPrime(long int number)
{
if(number <= 1)
return false;
for(int i = 2; i <= (number / 2); i++)
if(number % i == 0)
return false;
return true;
}
int sumOfDigits(long int number)
{
int sum = 0;
while(number >= 1 && number <= 100000)
{
sum += number % 10;
number /= 10;
}
return sum;
}
long int bthPrimeAfter(int counter, long int number)
{
while(counter)
{
++number;
if(isPrime(number))
--counter;
}
return number;
}
int main()
{
long int number;
cin>>number;
int const counter = sumOfDigits(number);
cout<<bthPrimeAfter(counter, number)<<"\n";
return 0;
}
【问题讨论】:
-
您已经销毁了
n中的值以在while循环中生成b。当for循环出现时,n保持为零。 -
非常感谢。我完全忘记了这个编程规则。
-
您是否阅读了prime numbers 上的维基百科页面?您是否阅读了primality tests 上的维基百科页面?您查看过this C++ reference 网站吗?你读过numerical digits 吗?
标签: c++ function for-loop if-statement