我有点陷入困境。我试图测试输入的数字是否为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;
}
答案 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
将同时执行b
和c
。
答案 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;
}