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
1
По всей видимости имеется ввиду остаток от деления на 10, т.е.
с = n % 10
ответ дан 5 янв 2020 в 10:39
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 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 .
-
int count =0; int no = 4; while(no!=0){ int d = no%2; if(d==1) count++; no = no/2; str = str+ d; }
-
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.
asked Mar 11, 2011 at 0:51
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
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
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
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 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
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 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
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 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 часов
Старт в любое время