Модераторы: LSD, AntonSaburov
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Сколько цифр в числе 
:(
    Опции темы
turtles
Дата 17.8.2011, 05:53 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 49
Регистрация: 17.2.2011

Репутация: нет
Всего: нет



Здравствуйте! У меня вот такой вопрос, по заданию Натуральное положительное число записано в переменную n.
 Определить и вывести на экран, сколько цифр в числе n.
 В переменную записал число и вывел результат.
 А теперь немогу понять как можно подсчитать сколько цифр в числе. как это можно подсчитать?
Код

public class MATH {
    public static void  main(String args[]){
       final double a = 33;
        System.out.println(a);
    }
}

PM MAIL   Вверх
rodnover
Дата 17.8.2011, 06:30 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: нет
Всего: 10



Может типа такого:
Код

int n;
int ln = n.ToString().length();

PM MAIL   Вверх
dobrolub
Дата 17.8.2011, 06:32 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



Натуральное число - целое число. А количество цифр равно количеству разрядов. А количество разрядов это число делений на 10, до тех пор пока результат деления не будет равен 0...

Код

public class T {
    public static void main(String []args) {
        int x = Integer.parseInt(args[0]);
        int n = 1;
        while ((x = x/10) > 0)
            n++;
        System.out.println(n);
    }
}


Это сообщение отредактировал(а) dobrolub - 17.8.2011, 06:57
PM   Вверх
LSD
Дата 17.8.2011, 10:50 (ссылка) |    (голосов:2) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(dobrolub @  17.8.2011,  07:32 Найти цитируемый пост)
Натуральное число - целое число. А количество цифр равно количеству разрядов. А количество разрядов это число делений на 10, до тех пор пока результат деления не будет равен 0...

Идея верная, но цикл тут не нужен smile 
Код

1 + (int) Math.log10(Math.abs(n))


Добавлено через 2 минуты и 4 секунды
Ну и не забываем про Integer.MIN_VALUE конечно smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
priam220
Дата 22.8.2011, 19:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



а чем вам предлажуха rodnover'a не понравилась? А если число будет задано не в 10-й системе?..
PM MAIL   Вверх
rodnover
Дата 22.8.2011, 20:55 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: нет
Всего: 10



Просто, коротко, но неоптимально. smile

С логарифмом - самая лучшая идея.

Это сообщение отредактировал(а) rodnover - 22.8.2011, 20:56
PM MAIL   Вверх
dobrolub
Дата 22.8.2011, 23:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 385
Регистрация: 18.12.2009
Где: Vancouver, Canada

Репутация: 11
Всего: 16



думаю, что ожидаемое решение - моё  smile 
Это ведь вопрос из теста, правда?
PM   Вверх
danco0x53
Дата 23.8.2011, 15:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Новичок



Профиль
Группа: Участник
Сообщений: 4
Регистрация: 1.8.2011

Репутация: нет
Всего: нет



> Dobrolub: мне кажется, более симпатичным был бы вариант  for(n=1; x>0; x /= 10);  И еще Вы забыли Math.abs
> LSD - а еще не забудем про n=0
  К тому же - вы абсолютно точно уверены, что ВСЕ степени десятки после взятия десятичного логарифма не вернут n,999999999999...? Javadoc говорит: 
Цитата
 The computed result must be within 1 ulp of the exact result. 


IMHO, rednover - просто, коротко, понятно дурвсем - и без необходимости что-то помнить.
PM MAIL   Вверх
LSD
Дата 23.8.2011, 15:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(danco0x53 @  23.8.2011,  16:05 Найти цитируемый пост)
LSD - а еще не забудем про n=0

Натуральные числа не включают 0 smile 


Цитата(danco0x53 @  23.8.2011,  16:05 Найти цитируемый пост)
К тому же - вы абсолютно точно уверены, что ВСЕ степени десятки после взятия десятичного логарифма не вернут n,999999999999...?

Для int - уверен smile 



Кстати, в оригинале фигуриует double, так что без изменений будет работать только логарифм smile


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
priam220
Дата 23.8.2011, 17:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



Цитата(LSD @  23.8.2011,  15:50 Найти цитируемый пост)
Кстати, в оригинале фигуриует double, так что без изменений будет работать только логарифм


я так понял речь идет о задании, коком то.
но ведь речь может идти о колличестве чисел не только в целой части но и в мантиссе, с кажем до заданной точности. 

безусловно, логорифмирование выглядит очень математично, так что на собеседке, например, будет действовать блондинисто.
Но в реальности думаю легче конвертить в строку, просплитать, если надо, конвертнуть в нужную систему исчисления и т.д.

Интересно, насколько ресурсоемко вычисление логарифма? По сути это умножение с проверкой. 
Конвертация в строку, наверное медленнее, меня беспокоит метод getChars в первую очередь.

кста, сами джависты вычисляют количество символов в int весьма орригинально и без логарифмов  (Integer.class) smile :
Код

    final static int [] sizeTable = { 9, 99, 999, 9999, 99999, 999999, 9999999,
                                      99999999, 999999999, Integer.MAX_VALUE };

    // Requires positive x
    static int stringSize(int x) {
        for (int i=0; ; i++)
            if (x <= sizeTable[i])
                return i+1;
    }


Это сообщение отредактировал(а) priam220 - 23.8.2011, 18:22
PM MAIL   Вверх
LSD
Дата 23.8.2011, 18:50 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(priam220 @  23.8.2011,  18:27 Найти цитируемый пост)
Интересно, насколько ресурсоемко вычисление логарифма?

Одна команда smile 


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
priam220
Дата 23.8.2011, 19:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 291
Регистрация: 4.6.2010

Репутация: 7
Всего: 8



LSD,  почему тогда в core не испльзовали логарифмические команды? Я о куске с массивом девяток...
Не догадались?  smile 
PM MAIL   Вверх
LSD
Дата 24.8.2011, 10:05 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Leprechaun Software Developer
****


Профиль
Группа: Модератор
Сообщений: 15718
Регистрация: 24.3.2004
Где: Dublin

Репутация: 210
Всего: 538



Цитата(priam220 @  23.8.2011,  20:34 Найти цитируемый пост)
LSD,  почему тогда в core не испльзовали логарифмические команды? Я о куске с массивом девяток...
Не догадались?

Одна команда это в x87, а в Java это цельный вызов native функции со своим немаленьким оверхедом. Не думаю что JIT настолько интеллектуален (по крайней мере во времена написания этого кода), чтобы с оптимизировать это в одно команду.


--------------------
Disclaimer: this post contains explicit depictions of personal opinion. So, if it sounds sarcastic, don't take it seriously. If it sounds dangerous, do not try this at home or at all. And if it offends you, just don't read it.
PM MAIL WWW   Вверх
rodnover
Дата 24.8.2011, 10:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Бывалый
*


Профиль
Группа: Участник
Сообщений: 223
Регистрация: 7.4.2009

Репутация: нет
Всего: 10



Почему-то мне кажется, что для такого действия достаточно интеллектуален.

С массивом супер просто решение!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "Java"
LSD   AntonSaburov
powerOn   tux
javastic
  • Прежде, чем задать вопрос, прочтите это!
  • Книги по Java собираются здесь.
  • Документация и ресурсы по Java находятся здесь.
  • Используйте теги [code=java][/code] для подсветки кода. Используйтe чекбокс "транслит", если у Вас нет русских шрифтов.
  • Помечайте свой вопрос как решённый, если на него получен ответ. Ссылка "Пометить как решённый" находится над первым постом.
  • Действия модераторов можно обсудить здесь.
  • FAQ раздела лежит здесь.

Если Вам помогли, и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, LSD, AntonSaburov, powerOn, tux, javastic.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Java: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0892 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.