2017-02-22 70 views
-3

我试图查看数字是否可以被数组中的任何给定数字整除。 我见过很多答案,其中number1%number2 == 0的答案,但我还没有找到任何数字的数组,我宁愿不写出数组中的每个数字我自己(这也会工作硬)。是否可以被数组中的任何数字整除

所以这里是我想弄明白。正如你所看到的,当前工作的唯一方式是如果我给出的最后一个数字是真的,否则else语句会启动并将number1_result赋值为false。

int square_numbers[10] = { 4, 9, 25, 36, 49, 64, 81, 100, 121, 144 }; 
int number1;  
bool number1_result; 

cin >> number1; 

for (int i = 0; i < 10; i++) { 
    if(number1 % square_numbers[i] == 0) 
     number1_result = true; 
    else 
     number1_result = false; 
} 

我该如何确定如果循环曾经评估为true,那么这是真的。如果至少有一次不是这样,那就是错误的。

让我知道你是否需要更多信息,谢谢!

+0

'number1_result == true/false'是一个条件,将'=='更改为'=' –

+1

找到除数后立即断开循环。没有必要继续检查其他人。 – NathanOliver

+1

[打开警告。](http://coliru.stacked-crooked.com/a/e9cadc9857b846e5) – chris

回答

2

一旦找到除数,就打破循环。并使用=代替==进行赋值。
正确的解决方案是 -

int square_numbers[10] = { 4, 9, 25, 36, 49, 64, 81, 100, 121, 144 }; 
bool number1_result=false; 

for (int i = 0; i < 10; i++) { 
    if(number1 % square_numbers[i] == 0) { 
     number1_result = true; 
     break; 
    } 
} 

问题与您的代码需要重写number_result即使它已经成为事实。

考虑的例子中,number1=4square_number={2, 3}
在你的循环num_result将成为true起初比较,但它会再次成为false旁边比较3

+0

我知道我忽略了一些明显的东西,谢谢。 –

+0

如果有帮助,您可以标记为正确。 –

+0

只有在时间限制 –

0

问题是你要分配number1_result应检查循环内部,而是你必须输入number1

cin >> number1_result; // redundant 

答案:

int square_numbers[10] = { 4, 9, 25, 36, 49, 64, 81, 100, 121, 144 }; 
bool number1_result = false; 

int number1; 
cin >> number1; 

for (int i = 0; i < 10; i++) { 
    if(number1 % square_numbers[i] == 0){ 
     number1_result = true; 
     break; 
    } 
} 
2

随着std

bool number1_result = std::any_of(std::begin(square_numbers), 
            std::end(square_numbers), 
            [&](auto e){ return number % e == 0; }); 
+0

看来C++不受欢迎...

相关问题