如何使用switch语句测试数字是否为素数或可被7整除(C ++)

时间:2015-02-23 04:09:27

标签: c++ switch-statement

我有点陷入困境。我试图测试输入的数字是否为7或可被7整除。

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

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

例如,如果用户输入的数字是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;
}

3 个答案:

答案 0 :(得分:2)

您已经拥有c的解决方案,它与a的解决方案相同。

如果(number % 2) == 0,则数字可被2整除。同样,如果(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,因为您的问题需要它,但除了您的问题之外, 使用switch可以轻松完成双选 - 或if-else语句。


b(素数)的解决方案稍微复杂一些。如果数字不是任何数字的倍数,则数字是素数,但不包括数字本身(有效率,例如只能达到数字的平方根,并且只检查素数而不是所有数字,但如果你愿意,可以在以后添加。

因此,您将有一个循环x = 2..(n-1),您可以在其中检查余数是否为0,并说明情况不是素数((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

答案 1 :(得分:0)

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

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

然后,您可以在条件中使用此函数来确定数字是否为素数。如果你想测试各种各样的数字,筛子会更有效率,但这适用于大多数用途。

答案 2 :(得分:-2)

以下是代码:

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