如何使用switch语句(C++)测试一个数字是素数还是可被7整除

How to test if a number is prime or divisible by 7 using switch statements (C++)

本文关键字:整除 数字 语句 switch 何使用 C++ 测试 一个      更新时间:2023-10-16

我遇到了一个问题。我试着测试输入的数字是素数还是可被7整除。

基本上,我的程序要求用户输入一个数字,然后要求用户输入以下字母之一:"a"、"b"或"c"。字母对应以下选项:

a) 输入的数字是偶数或奇数(计算出来)b) 数字是素数或复合数c) 检查数字是否可以被7整除(计算出来)

例如,如果is用户输入的数字是5,然后选择字母"b",我应该得到输出"数字是素数"。另一方面,如果他选择字母"a",我应该得到输出"数字是奇数"。

如果有任何帮助,我将不胜感激。提前感谢!!

这就是我迄今为止设法创建的:

#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(素数)的解稍微复杂一些。如果数字不是任何数字的倍数(从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将同时执行bc

正如其他人已经说过的,您可以通过使用模(%)运算符来确定一个数字是否可以被其他数字整除。然而,没有内置的函数或运算符来确定一个数字是否为素数。互联网上有很多例子可以确定这一点,但其中一个微不足道的例子是:

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;
}