проверка целого числа на наличие нуля - PullRequest
10 голосов
/ 03 октября 2010

Учитывая целое число, как вы можете проверить, содержит ли оно 0, используя Java?

1 = Good
2 = Good
...
9 = Good
10 = BAD!
101 = BAD!
1026 = BAD!
1111 = Good

Как это можно сделать?

Ответы [ 7 ]

38 голосов
/ 03 октября 2010

Вы имеете в виду, если десятичное представление содержит 0? Абсолютный простейший способ сделать это:

if (String.valueOf(x).contains("0"))

Не забывайте, что число «изначально» не содержит 0 или нет (кроме самого нуля, конечно) - это зависит от базы. Таким образом, «10» в десятичном виде - это «A» в шестнадцатеричном, а «10» в шестнадцатеричном - это «16» в десятичном ... в обоих случаях результат изменится.

Могут быть более эффективные способы проверки наличия нуля в десятичном представлении целого числа, но они, вероятно, будут значительно более сложными, чем приведенное выше выражение.

22 голосов
/ 03 октября 2010

Если по какой-то причине вам не нравится решение, которое конвертирует в строку, вы можете попробовать:

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.

Редактировать: добавлены условия для работы с отрицательными числами и 0.

2 голосов
/ 03 октября 2010

Вы можете преобразовать его в строку и проверить, содержит ли он символ "0".

int number = 101;
if( ( "" + number ).contains( "0" ) ) {
  System.out.println( "contains the digit 0" );
}
1 голос
/ 03 октября 2010

Не знаю, проще ли, но есть другой способ.Разделите число на массив целых.Затем отсортируйте и проверьте, равен ли первый элемент нулю.Например,

int n = 14501;
// after splitting
int na = {1, 4, 5, 0, 1};
// after sorting
int na = {0, 1, 1, 4, 5};
1 голос
/ 03 октября 2010

Вот процедура, которая будет работать для обнаружения нулей в целых числах.Чтобы он работал с любым представлением (десятичное, шестнадцатеричное, восьмеричное, двоичное), вам нужно передать в качестве параметра базу.

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)
}
1 голос
/ 03 октября 2010

Integer.toString(yourIntValue).contains("0");

0 голосов
/ 03 октября 2010

Не использую Java, но конвертировать из C ++ не сложно PS. Позор любому, кто использует преобразование строк.

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