如何使用 switch 语句 (C++) 测试一个数是否为素数或可被 7 整除
How to test if a number is prime or divisible by 7 using switch statements (C++)
我有点被问题困住了。我正在尝试测试输入的数字是质数还是可被 7 整除。
基本上,我的程序要求用户输入一个数字,然后要求用户输入以下字母之一:"a"、"b" 或 "c"。字母对应以下选项:
a) 输入的数字是偶数还是奇数(算出来)
b) 数是素数或合数
c) 检查数字是否可以被 7 整除(算出来)
比如用户输入的数字是5,然后选择字母"b",我应该得到输出"The number is Prime"。另一方面,如果他选择字母 "a",我应该得到输出 "The number is Odd".
如果有任何帮助,我将不胜感激。提前致谢!!
这是我到目前为止设法创建的:
#include <iostream>
using namespace std;
int main ()
{
int number;
char letter = 0;
cout << "Input number: ";
cin >> number;
cout << "Enter (a) to check for even or odd.\n"
<< "Enter (b) to check for prime or not.\n"
<< "Enter (c) to check for divisible by 7 or not.\n";
cin >> letter;
switch (letter)
{
case 'a':
switch (number % 2)
{
case 0:
cout << "The number is Even.\n";
break;
case 1:
cout << "The number is Odd.\n";
break;
}
break;
case 'b':
switch ()// Don't know what to put for condition
{
case 0:
cout << "The number is Prime.\n";
break;
case 1:
cout << "The number is composite.\n";
break;
}
break;
case 'c':
switch (number % 7)
{
case 0:
cout << "The number is Divisible by 7.\n";
break;
case 1:
cout << "The number is not Divisible by 7.\n";
break;
}
break;
}
return 0;
}
您已经有了 c
的解决方案,它与 a
的解决方案相同。
如果 (number % 2) == 0
,一个数可以被二整除。类似地,如果 (number % 7) == 0
.
,则数字可以被 7 整除
所以,使用第一种情况,并意识到 switch
有一个默认子句:
switch (number % 7) {
case 0:
cout << "The number is a multiple of seven.\n";
break;
default:
cout << "The number is NOT a multiple of seven.\n";
break;
}
您会注意到我在那里使用了 switch
,因为您的问题需要它,但除了您的问题之外,实际上 不需要它。使用 if-else
.
可以很容易地完成一个二选一或 switch
语句
b
(素数)的解稍微复杂一些。如果数字不是 any 数字的倍数,则该数字是质数,从 2 到但不包括数字本身(有一些效率,例如只达到数字的平方根,并且只检查质数而不是所有数字,但如果您愿意,可以稍后添加它们)。
因此,您将有一个循环 x = 2..(n-1)
,在该循环中您将检查余数是否为零,如果是这样,则说它不是素数 ((n % x) == 0
)。
如果您检查范围内的所有数字,但没有找到一个余数为零的数字,则您有一个质数。
这种野兽的伪代码将是(使用 switch
,不过,这里也没有必要):
is_prime = true
for x = 2..n-1: // C++: for (int x = 2; x < n; x++)
if (n % x) == 0:
is_prime = false
break for
switch (is_prime):
case true:
print "Number is prime"
break switch
default:
print "Number is NOT prime"
break switch
只计算数字的平方根是对 for
循环的一个非常小的修改:
is_prime = true
for x = 2..∞ until x * x > n: // C++: for (int x = 2; x * x <= n; x++)
if (n % x) == 0:
is_prime = false
break for
您的代码还有 另一个 问题。当您使用 break
来防止内部开关掉线时,您没有用于外部开关。
在 case 'b':
和 case 'c':
行之前,您应该插入 break;
行以防止漏掉。否则,选择选项 a
将导致完成所有三个测试,而选项 b
将同时执行 b
和 c
.
正如其他人已经指出的那样,您可以使用模数 (%
) 运算符来确定一个数字是否可以被其他数字整除。但是,没有内置函数或运算符来确定数字是否为素数。互联网上有大量示例可用于确定这一点,但此类函数的一个简单示例是:
bool is_prime(int number){
if( number <= 2 ){
return number == 2;
}
for( int divisor = 3; divisor < number / 2; divisor += 2 ){
if( number % divisor == 0 ){
return false;
}
}
return true;
}
然后您可以在条件中使用此函数来确定数字是否为质数。如果您想测试大量不同的数字,筛子会更省时,但这适用于大多数用途。
代码如下:
#include <iostream>
using namespace std;
int main ()
{
int number;
char letter = 0;
cout << "Input number: ";
cin >> number;
cout << "Enter (a) to check for even or odd.\n"
<< "Enter (b) to check for prime or not.\n"
<< "Enter (c) to check for divisible by 7 or not.\n";
cin >> letter;
switch (letter)
{
case 'a':
if (number % 2 == 0)
{
cout << "The number is Even.\n";
}
else
{
cout << "The number is Odd.\n";
}
break;
case 'b':
if(number > 0 ) //Only positive numbers
{
int count = 0; //dummy variable
for(int i = 2; i < number; i++) // loop till one less than number entered
{
if(number % i == 0) //Number is divisible by other number
{
count++; // increment the count
break;
}
}
if(count == 0) // since prime numbers cannot be divided by any other number except 1 and the number itself
{
cout << "Prime number.\n";
}
else
{
cout << "Not a Prime number.\n";
}
}
else
{
cout << "Please enter a positive integer.\n";
}
break;
case 'c':
if (number % 7 == 0)
{
cout << "The number is Divisible by 7.\n";
}
else
{
cout << "The number is not Divisible by 7.\n";
}
break;
}
return 0;
}
我有点被问题困住了。我正在尝试测试输入的数字是质数还是可被 7 整除。
基本上,我的程序要求用户输入一个数字,然后要求用户输入以下字母之一:"a"、"b" 或 "c"。字母对应以下选项:
a) 输入的数字是偶数还是奇数(算出来) b) 数是素数或合数 c) 检查数字是否可以被 7 整除(算出来)
比如用户输入的数字是5,然后选择字母"b",我应该得到输出"The number is Prime"。另一方面,如果他选择字母 "a",我应该得到输出 "The number is Odd".
如果有任何帮助,我将不胜感激。提前致谢!!
这是我到目前为止设法创建的:
#include <iostream>
using namespace std;
int main ()
{
int number;
char letter = 0;
cout << "Input number: ";
cin >> number;
cout << "Enter (a) to check for even or odd.\n"
<< "Enter (b) to check for prime or not.\n"
<< "Enter (c) to check for divisible by 7 or not.\n";
cin >> letter;
switch (letter)
{
case 'a':
switch (number % 2)
{
case 0:
cout << "The number is Even.\n";
break;
case 1:
cout << "The number is Odd.\n";
break;
}
break;
case 'b':
switch ()// Don't know what to put for condition
{
case 0:
cout << "The number is Prime.\n";
break;
case 1:
cout << "The number is composite.\n";
break;
}
break;
case 'c':
switch (number % 7)
{
case 0:
cout << "The number is Divisible by 7.\n";
break;
case 1:
cout << "The number is not Divisible by 7.\n";
break;
}
break;
}
return 0;
}
您已经有了 c
的解决方案,它与 a
的解决方案相同。
如果 (number % 2) == 0
,一个数可以被二整除。类似地,如果 (number % 7) == 0
.
所以,使用第一种情况,并意识到 switch
有一个默认子句:
switch (number % 7) {
case 0:
cout << "The number is a multiple of seven.\n";
break;
default:
cout << "The number is NOT a multiple of seven.\n";
break;
}
您会注意到我在那里使用了 switch
,因为您的问题需要它,但除了您的问题之外,实际上 不需要它。使用 if-else
.
switch
语句
b
(素数)的解稍微复杂一些。如果数字不是 any 数字的倍数,则该数字是质数,从 2 到但不包括数字本身(有一些效率,例如只达到数字的平方根,并且只检查质数而不是所有数字,但如果您愿意,可以稍后添加它们)。
因此,您将有一个循环 x = 2..(n-1)
,在该循环中您将检查余数是否为零,如果是这样,则说它不是素数 ((n % x) == 0
)。
如果您检查范围内的所有数字,但没有找到一个余数为零的数字,则您有一个质数。
这种野兽的伪代码将是(使用 switch
,不过,这里也没有必要):
is_prime = true
for x = 2..n-1: // C++: for (int x = 2; x < n; x++)
if (n % x) == 0:
is_prime = false
break for
switch (is_prime):
case true:
print "Number is prime"
break switch
default:
print "Number is NOT prime"
break switch
只计算数字的平方根是对 for
循环的一个非常小的修改:
is_prime = true
for x = 2..∞ until x * x > n: // C++: for (int x = 2; x * x <= n; x++)
if (n % x) == 0:
is_prime = false
break for
您的代码还有 另一个 问题。当您使用 break
来防止内部开关掉线时,您没有用于外部开关。
在 case 'b':
和 case 'c':
行之前,您应该插入 break;
行以防止漏掉。否则,选择选项 a
将导致完成所有三个测试,而选项 b
将同时执行 b
和 c
.
正如其他人已经指出的那样,您可以使用模数 (%
) 运算符来确定一个数字是否可以被其他数字整除。但是,没有内置函数或运算符来确定数字是否为素数。互联网上有大量示例可用于确定这一点,但此类函数的一个简单示例是:
bool is_prime(int number){
if( number <= 2 ){
return number == 2;
}
for( int divisor = 3; divisor < number / 2; divisor += 2 ){
if( number % divisor == 0 ){
return false;
}
}
return true;
}
然后您可以在条件中使用此函数来确定数字是否为质数。如果您想测试大量不同的数字,筛子会更省时,但这适用于大多数用途。
代码如下:
#include <iostream>
using namespace std;
int main ()
{
int number;
char letter = 0;
cout << "Input number: ";
cin >> number;
cout << "Enter (a) to check for even or odd.\n"
<< "Enter (b) to check for prime or not.\n"
<< "Enter (c) to check for divisible by 7 or not.\n";
cin >> letter;
switch (letter)
{
case 'a':
if (number % 2 == 0)
{
cout << "The number is Even.\n";
}
else
{
cout << "The number is Odd.\n";
}
break;
case 'b':
if(number > 0 ) //Only positive numbers
{
int count = 0; //dummy variable
for(int i = 2; i < number; i++) // loop till one less than number entered
{
if(number % i == 0) //Number is divisible by other number
{
count++; // increment the count
break;
}
}
if(count == 0) // since prime numbers cannot be divided by any other number except 1 and the number itself
{
cout << "Prime number.\n";
}
else
{
cout << "Not a Prime number.\n";
}
}
else
{
cout << "Please enter a positive integer.\n";
}
break;
case 'c':
if (number % 7 == 0)
{
cout << "The number is Divisible by 7.\n";
}
else
{
cout << "The number is not Divisible by 7.\n";
}
break;
}
return 0;
}