#c #algorithm #math
#c #алгоритм #математика
Вопрос:
Я создаю программу, в которой мне нужно проверить, содержит ли двузначное число, такое как 76 или 70, 0 или нет.
- с
76
результат был бы ложным - с
70
истиной
Кажется, я не могу что-то придумать, и я все еще застрял ни с чем, не зная, с чего начать.
Комментарии:
1. Означает, что число делится на 10? Приветствую вас.
2. Число содержит ноль, если оно заканчивается на ноль (и является положительным), или число, деленное на десять, содержит ноль. Напишите цикл, который многократно делит число на 10 и проверяет, равно ли число по модулю 10 0.
3. Оба они предполагают, что вы уже знаете об остатках и, конечно, об операторе по модулю .
4. Вопрос не ясен. Вам нужно знать, имеет ли число 0 в конце, например 70, 760, но не 704. Или вы хотите знать, имеет ли число 0 где-нибудь вроде 70, 704,401 и т.д.?
5. Вам нужно также проверять такие числа, как
05
?
Ответ №1:
вы можете преобразовать число в строку и проверить, равен ли первый или второй символ ‘0’
bool containsZero (int x) {
string tmp = to_string(x);
if (tmp[0] == '0' || tmp[1] == '0')
return true;
return false;
}
или разделите число на 10 дважды и проверьте, равна ли каждая цифра 0 или нет
bool containsZero (int x) {
while (x != 0)
{
if (x % 10 == 0)
return true;
x = x / 10;
}
return false;
}
Комментарии:
1. Я никогда не думал об этом, обновил его @JanSchultke
2. Вы можете упростить первую функцию до
return tmp[0] == '0' || tmp[1] == '1'
;3. конечно @JanSchultke, но я считаю, что это заставит владельца вопроса запутаться
Ответ №2:
Единственными двузначными числами, которые содержат нули, являются числа, кратные 10, поэтому
bool has_zero = number % 10 == 0;
Комментарии:
1. Это только проверяет, заканчиваются ли двузначные числа нулем. OP спрашивает, содержит ли оно ноль.
2. @JanSchultke Двузначные числа — это числа от 10 до 99. Ни у одного из них нет нуля ни в чем, кроме последней позиции.
Ответ №3:
Предположим, что число равно x
Вы можете легко проверить наличие двузначного числа, используя условие:
if((x%10==0)||(x/10)%10==0))
{
//number has zero
}
else
{
//number does not have zero
}
Комментарии:
1. Если число гарантированно будет двузначным, тогда вам нужно только
return !(x % 10 amp;amp; x / 10)
2. OP не упомянул, если по двузначному числу он рассматривает числа, перед которыми стоит 0
Ответ №4:
Если вы хотите проверять цифру за цифрой, то начальная логика может быть:
- Преобразовать число в строку (для итерации по нему)
- Цикл по числу
- Проверьте, равна ли однозначная цифра ‘0’ или нет
#include <iostream>
#include <string>
using namespace std;
int main() {
bool ischeck = false;
int x = 67;
string a = to_string(x);
for(int i=0;i <a.length();i )
{
if(a[i]=='0')
{
ischeck = true;
break;
}
}
if(ischeck)
{
cout<<"Truen";
}
else{
cout<<"Falsen";
}
}
В противном случае логика, объясненная @freakish, является лучшей. В этом случае программа будет
#include <iostream>
#include <string>
using namespace std;
int main() {
int x = 70;
if(x%10==0)
{
cout<<"True";
}
else{
cout<<"False";
}
}
2-я логика не будет работать в случае таких чисел, как «05» или «07», но 1-я логика будет работать в любом случае.
Комментарии:
1. OP запрашивает числа с 2 цифрами. В двузначном числе может быть только одна цифра, которая равна 0
Ответ №5:
Если это только для двузначного числа, вы можете сделать следующее внутри функции, возвращаемым параметром которой будет логическое значение:
bool contains_zero(int num) {
int rem = num % 10;
return rem == 0;
}
Комментарии:
1. Я думаю, что альтернативой может быть троичная операция @MarekR
2. альтернативой является запись
return (rem == 0);