проверка целого числа на наличие нуля
учитывая целое число, как вы можете проверить, содержит ли оно 0, используя Java?
1 = Good 2 = Good ... 9 = Good 10 = BAD! 101 = BAD! 1026 = BAD! 1111 = Good
Как это можно сделать?
7 ответов
вы имеете в виду, если десятичное представление содержит 0? Абсолют простой способ сделать это:
if (String.valueOf(x).contains("0"))
Не забывайте, что число не "по своей сути" содержит 0 или нет (за исключением самого нуля, конечно) - это зависит от базы. Таким образом," 10 "в десятичном-это" A "в шестнадцатеричном, а" 10 "в шестнадцатеричном -" 16 " в десятичном... в обоих случаях результат изменится.
могут быть более эффективные способы проверки наличия нуля в десятичной дроби представление целого числа, но они, вероятно, будут значительно более вовлечены, чем выражение выше.
Если по какой-то причине вам не нравится решение, которое преобразуется в строку, вы можете попробовать:
boolean containsZero(int num) {
if(num == 0)
return true;
if(num < 0)
num = -num;
while(num > 0) {
if(num % 10 == 0)
return true;
num /= 10;
}
return false;
}
Это также предполагает num
база 10.
Edit: добавлены условия для работы с отрицательными числами и самим 0.
вы можете преобразовать его в строку и проверить, если оно содержит символ "0".
int number = 101;
if( ( "" + number ).contains( "0" ) ) {
System.out.println( "contains the digit 0" );
}
вот что получится обнаружить нулей в чисел. Чтобы заставить его работать с любым представлением (десятичным, шестнадцатеричным, восьмеричным, двоичным), вам нужно передать базу в качестве параметра.
public static boolean hasZero(int num, int base) {
assert base > 0 : "must have positive non-zero base";
if (num == 0)
return true;
while(num != 0) {
if (num % base == 0) {
return true;
}
else {
num = num / base;
}
}
return false;
}
public static void main(String args[]) {
System.out.println(hasZero(10, 10)); // true (base 10 int)
System.out.println(hasZero(-12, 10)); // false (base 10 int)
System.out.println(hasZero(0x10, 16)); // true (hex is base 16)
System.out.println(hasZero(0x1A, 16)); // false (hex is base 16)
}
Я не знаю, легче ли это, но вот другой способ. Разделите число на массив ints. Затем отсортируйте и проверьте, равен ли первый элемент нулю. Е. Г
int n = 14501;
// after splitting
int na = {1, 4, 5, 0, 1};
// after sorting
int na = {0, 1, 1, 4, 5};
не используя Java, но это не совсем сложно преобразовать из C++ ПС. Позор любому, кто использует преобразование строк.
bool Contains0InBase10( unsigned int i, unsigned int& next )
{
unsigned int divisor = 10;
unsigned int remainder = 0;
while( divisor <= i )
{
unsigned int newRemainder = i%divisor;
if( newRemainder - remainder == 0)
{
// give back information allowing a program to skip closer to the next
// number that doesn't contain 0
next = i + (divisor / 10) - remainder;
return true;
}
divisor *= 10;
remainder = newRemainder;
}
return false;
}