Как найти число единиц в числе java

package s02;

import java.util.Scanner;

public class Task3 {
    public static void main(String[] args) {
     int n = requestNumber();
      int m = n / 10; //кол-во десятков
      int c = n / 1; //количество единиц??

        System.out.println(m);
        System.out.println(c);

               }

задан 5 янв 2020 в 10:35

Ivan Sherbovich's user avatar

1

По всей видимости имеется ввиду остаток от деления на 10, т.е.

 с = n % 10

ответ дан 5 янв 2020 в 10:39

Z.John's user avatar

Z.JohnZ.John

3,2921 золотой знак6 серебряных знаков17 бронзовых знаков

Первое число с конца это число единиц, а второе с конца это десятки. Соответственно, если с целого числа вычесть десятки, то останутся единицы, это и будет число единиц!

Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = n / 10; //кол-во десятков
        int c = n - m * 10; //количество единиц

        System.out.println("Количество десятков: " + m);
        System.out.println("Количество единиц: " + c);

или

Scanner sc = new Scanner(System.in);

        int n = sc.nextInt();
        int m = n / 10; //кол-во десятков
        int c = n % 10; //количество единиц

        System.out.println("Количество десятков: " + m);
        System.out.println("Количество единиц: " + c);

ответ дан 5 янв 2020 в 10:44

Artur Vartanyan's user avatar

Artur VartanyanArtur Vartanyan

1,1563 золотых знака15 серебряных знаков38 бронзовых знаков

Possible Duplicate:
Best algorithm to count the number of set bits in a 32-bit integer?

I want to find out how many 1s are there in binary representation of a number.I have 2 logic .

  1.   int count =0;
    int no = 4;
    
    while(no!=0){
        int d = no%2;
        if(d==1)
            count++;
        no = no/2;
        str = str+ d;
    }
    
  2. Now second logic is to keep on masking number iteratively with 1,2,4,8,32 and check if result is 1,2,4, 8….. Am not geting what should be ending condition for this loop.

Community's user avatar

asked Mar 11, 2011 at 0:51

akshayxyz's user avatar

2

Use Java API(java 5 or above).

Integer.bitCount(int);
Long.bitCount(long);

NOTE: The above java methods are based on hacker’s delight

answered Mar 11, 2011 at 4:27

Prince John Wesley's user avatar

faster than any of the earlier answers:
(proportional to number of 1 bits rather than total bits)

public class Foo {
  public static void main(String[] argv) throws Exception {
    int no = 12345;
    int count;
    for (count = 0; no > 0; ++count) {
      no &= no - 1;
    }
    System.out.println(count);
  }
}

answered Mar 11, 2011 at 1:21

necromancer's user avatar

necromancernecromancer

23.8k22 gold badges67 silver badges115 bronze badges

4

Looks like c/c++/c#, if so you have shifting.. just loop to N-1 bits from 0 and use sum+=(value>>i)&1

Ie: you always check the last/right most bit but move the binary representation of the number to the right for every iteration until you have no more bits to check.

Also, think about signed/unsigned and any integer format. But you dont state how that should be handled in the question.

answered Mar 11, 2011 at 1:01

stefan's user avatar

stefanstefan

2,86621 silver badges27 bronze badges

6

We can make use of overflow for your loop:

int count = 0;
int number = 37;
int mask = 1;

while(mask!=0)
{
    int d = number & mask;
    if(d != 0)
        count++;
    /* Double mask until we overflow, which will result in mask = 0... */
    mask = mask << 1;
    str = str+ d;
}

answered Mar 11, 2011 at 1:03

Heath Hunnicutt's user avatar

Heath HunnicuttHeath Hunnicutt

18.5k2 gold badges39 silver badges62 bronze badges

3

One idea that’s commonly employed for counting ones is to build a lookup table containing the answers for each individual byte, then to split apart your number into four bytes and sum the totals up. This requires four lookups and is quite fast. You can build this table by writing a program that manually computes the answer (perhaps using your above program), and then can write a function like this:

private static final int[] BYTE_TOTALS = /* ... generate this ... */;

public static int countOneBits(int value) {
    return BYTE_TOTALS[value        & 0xFF] +
           BYTE_TOTALS[value >>>  8 & 0xFF] +
           BYTE_TOTALS[value >>> 16 & 0xFF] +
           BYTE_TOTALS[value >>> 24 & 0xFF];
}

Hope this helps!

answered Mar 11, 2011 at 6:40

templatetypedef's user avatar

templatetypedeftemplatetypedef

360k101 gold badges890 silver badges1059 bronze badges

There are various ways to do this very fast.

MIT HAKMEM Count

int no =1234;
int tmp =0;
tmp = no - ((no >> 1) & 033333333333) - ((no >> 2) & 011111111111);
System.out.println( ((tmp + (tmp >> 3)) & 030707070707) % 63);

answered Mar 11, 2011 at 8:59

Dead Programmer's user avatar

Dead ProgrammerDead Programmer

12.4k23 gold badges79 silver badges112 bronze badges

Your end condition should be keeping track of the magnitude of the bit you are at; if it is larger than the original number you are done (will get only 0s from now on).

Oh, and since you didn’t specify a language, here’s a Ruby solution 🙂

class Integer
  def count_binary_ones
    to_s(2).scan('1').length
  end
end

42.count_binary_ones #=> 3

answered Mar 11, 2011 at 0:54

Phrogz's user avatar

PhrogzPhrogz

294k111 gold badges651 silver badges739 bronze badges

3

How about using the BigInteger class.

public void function(int checkedNumber) {
    BigInteger val = new BigInteger(String.valueOf(checkedNumber));
    val = val.abs();
    int count = val.bitCount();
    String binaryString = val.toString(2);

    System.out.println("count = " + count);
    System.out.println("bin = " + binaryString);
}

The result of function(42); is following.

count = 3
bin = 101010

answered Mar 11, 2011 at 2:33

Yu Sun corn's user avatar

Yu Sun cornYu Sun corn

6166 silver badges8 bronze badges

Я новичок в Java, и мне нужен совет, чтобы исправить этот код, мне нужно написать программу на Java, чтобы показать значение сотен, десятков и мест для трехзначного числа. Это то, что у меня есть, есть идеи, как заставить его работать? Я не получаю никаких ошибок, но мой номер даже не выводится на консоль правильно. Например, если я набрал 123 для моего трехзначного числа, все печатается пустым. Например:

Введите трехзначное число: 123 Разрядное число сотен: Разрядное число десятков: Разрядное число одних: Ошибка! Номер более 3 цифр. Ошибка! Номер менее 3 цифр.

Например, он не определяет мой ввод “123” или что-то еще, что я положил.

    import java.util.Scanner;
        public class ValueOfDigits {
            public static void main(String[] args) {

                //Create new scanner
                Scanner input = new Scanner(System.in);

                //Values of each digit
                int hundreds = 0;
                int tens = 0;
                int ones = 0;

                //Prompt user to input 3 digit number           
                System.out.print("Enter a 3 digit number: ");
                int number = input.nextInt();

                //Displays hundreds place digit
                hundreds = number / 100;
                System.out.printf("Hundreds place digit: " , hundreds);

                //Displays tens digit
                tens = (number - hundreds) / 10;
                System.out.printf("nTens place digit: " , tens);


                //Display ones digit
                ones = (number - tens - hundreds);
                System.out.printf("nOnes place digit: " , ones);   


                //Error if number is less or more then three digits
                if (number > 999); 
                System.out.println("nError! Number more then 3 digits.");
                if (number < 100);
                System.out.println("Error! Number less then 3 digits.");
}

}

2016-09-10 19:10

7
ответов

Решение

Мы можем получить единицы, сто или любое другое значение в Java, используя простой код, как показано ниже:

int n=356;
int one=(n/1)%10;
int tens= (n/10)%10;
int hundred = (n/100)%10;

2019-04-28 16:14

У вас есть небольшая ошибка в расчете десятой и одной цифры.

           //Displays tens digit
            tens = (number %100) / 10;
            System.out.println("Tens place digit: " + tens);

            //Display ones digit
            ones = number %10;
            System.out.println("Ones place digit: " ,+ ones);

Удалите точку с запятой после условия if.

Опять же, проверка 3-х цифр должна выполняться сразу после прочтения номера. В противном случае бессмысленный расчет будет сделан для недействительных номеров.

2016-09-10 19:57

      public class Main {

    public static void main(String[] args) {

       int number=18970;

        int one=(number/1)
        int ones=(number/1)%10;
        int tens=(number/10)%10;
        int hundred=(number/100)%10;
        int thousand=(number/1000)%10;
        int tenThousand=(number/10000)%10;
        double result = (number/10)%10;

      System.out.println("Ones: " + ones + " Tens: "+ tens + " Hundred: "+ hundred + " Thousand: " + thousand +" Ten Thousand:  " +  tenThousand);
    }
}


hashninja

07 дек ’22 в 13:32
2022-12-07 13:32

2022-12-07 13:32

Полностью исправленный код здесь: вы можете сравнить с вашим кодом, чтобы найти ошибку в вашем коде

      import java.util.Scanner;
       class ValueOfDigits {
          public static void main(String[] args) 
           {
             //Create new scanner
            Scanner input = new Scanner(System.in);

            //Values of each digit
            int hundreds = 0;
            int tens = 0;
            int ones = 0;

            //Prompt user to input 3 digit number           
            System.out.print("Enter a 3 digit number: ");
            int number = input.nextInt();

  if (number <= 999 && number > 99)   // Checking condition for three digit number
  {

            //Displays hundreds place digit
            hundreds = number / 100;
            System.out.printf("Hundreds place digit: " + hundreds);

            //Displays tens digit
            tens = (number - (hundreds*100)) / 10;  // compare with your code
            System.out.printf("nTens place digit: " + tens);


            //Display ones digit
            ones = (number - (tens*10) - (hundreds*100));   // compare with your code
            System.out.printf("nOnes place digit: " + ones);   
  }
                             //Error if number is less or more then three digits
else                                                                    
{      
  if (number > 999)
            System.out.println("nError! Number more then 3 digits.");
            if (number < 100)
            System.out.println("Error! Number less then 3 digits.");
  }



  }
  }

2018-10-14 06:42

      class Source {
    public static void main(String[] args) {


    Create new scanner
    Scanner input = new Scanner(System.in);

    //Values of each digit
    int tenThousands=0;
    int thousands=0; 
    int hundreds=0; 
    int tens=0; 
    int ones=0;

    //Prompt user to input 5 digit number
       
    int n = input.nextInt();
    if (n > 99999) {
        System.out.println("nError! Number more than 5 digits.");
        }
    else if (n < 10000) {
        System.out.println("Error! Number less than 5 digits.");
        }
    else if (10000<=n&&n<=99999){
      tenThousands = n/10000;
            System.out.println(tenThousands);
      thousands = (n/1000)%10;
      System.out.println(thousands);
      hundreds = (n%1000)/100;
            System.out.println(hundreds);
      tens = (n%100)/10;
            System.out.println(tens);
      ones = n%10;
            System.out.println(ones);
 


       
        }
     }
}

2021-03-05 18:21

'import java.util.Scanner;

public class Main {

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    int a = sc.nextInt();
    if (a < 10) {
      System.out.println(0);
    } else {
      System.out.println((a- (a/100)*100)/10);
    }
  }
}'

2020-04-29 15:43

Другие вопросы по тегам
java

Это достаточно легко, но есть небольшая морщина при минимальном целочисленном значении, которое, как мы знаем, будет иметь 32 в двоичном виде, так как 2 ^ 31 представлено двумя дополнениями.

Я предлагаю вам сначала приступить к решению с некоторыми тестовыми примерами:

@Test
public void should_be_0_ones_in_zero() {
    assertEquals(0, Ones.count(0));
}

@Test
public void should_be_1_one_in_one() {
    assertEquals(1, Ones.count(1));
}

@Test
public void should_be_1_one_in_two() {
    assertEquals(1, Ones.count(2));
}

@Test
public void should_be_4_ones_in_fifteen() {
    assertEquals(4, Ones.count(15));
}

@Test
public void should_be_31_ones_in_max_integer() {
    assertEquals(31, Ones.count(Integer.MAX_VALUE));
}

Обработка положительных целых чисел довольно проста.

static class Ones {
    static int count(int n) {
        if (n < 2) return n;
        return (n & 1) + count(n >> 1); 
    }
} 

Здесь выражение:

(n & 1)

описывает однозначность наименее значимого бита – то есть он либо 0, либо 1. Мы фиксируем это для полученного счетчика, а затем продолжаем рекурсивно с остальными битами (кроме знакового):

n >> 1

Я предполагаю, что вы были бы заинтересованы в обработке отрицательных значений, таких как этот.

@Test
public void should_be_2_ones_in_negative_one() {
    assertEquals(2, Ones.count(-1));
}

и этот!

@Test
public void should_be_32_ones_in_min_integer() {
    assertEquals(32, Ones.count(Integer.MIN_VALUE));
}

На данный момент у меня нет никакой идеи обрабатывать Integer.MIN_VALUE, кроме как явно проверять его.

static class Ones {
    static int count(int n) {
        if (n == Integer.MIN_VALUE) return 32;
        if (n < 0) return 1 + countForPositive(-1 * n);
        return countForPositive(n);
    }

    // expect disappointing results for negative values of n, such
    // as Math.abs(Integer.MIN_VALUE)--yes, really!
    static int countForPositive(int n) {
        if (n < 2) return n;
        return (n & 1) + countForPositive(n >> 1); 
    }
}

Для отрицательных чисел просто добавьте 1 для учета знакового бита. Надеюсь, поможет!

Ответы

Аватар пользователя Иван Полежаев

Для подсчета разрядности числа в Java можно использовать метод Math.log10(). Данный метод возвращает десятичный логарифм числа. Для получения разрядности числа нужно добавить 1 к значению логарифма и привести результат к типу int

Например:

int num = 12345;
int digitCount = (int) (Math.log10(num) + 1);
System.out.println("Разрядность числа " + num + " равна " + digitCount);

Результат выполнения программы:

Разрядность числа 12345 равна 5



1



0

Добавьте ваш ответ

Рекомендуемые курсы

11 часов

Старт в любое время

14 часов

Старт в любое время

Типы данных и основные конструкции языка Java: методы, условия, циклы; создание несложных программ

37 часов

Старт в любое время

Похожие вопросы

Добавить комментарий