Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / Java [игнор отключен] [закрыт для гостей] / Aльтернативный способ подсчета сумы цыфр в числе / 25 сообщений из 34, страница 1 из 2
19.07.2015, 16:01
    #39010756
arrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Мне надо это сделать без помощи цыклов, стрингов, наверное без оператора остачи. Какие есть варианты или последний вариант единственный?
...
Рейтинг: 0 / 0
19.07.2015, 17:55
    #39010782
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
int c;
(c & 0b0000 0000 0000 1111) +
(c & 0b0000 0000 1111 0000) >>> 4 +
(c & 0b0000 1111 0000 0000) >>> 8 +
(c & 0b1111 0000 0000 0000) >>> 16
...
Рейтинг: 0 / 0
19.07.2015, 17:57
    #39010783
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
примерно так, где-то или около :)
...
Рейтинг: 0 / 0
19.07.2015, 18:09
    #39010794
Изопропил
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
arrt,

представление числа?
основание системы счисления?
...
Рейтинг: 0 / 0
19.07.2015, 19:37
    #39010811
Usman
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
arrt,

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
public static int sumDigits(int num) {
    int sum = 0;
    while (num != 0) {
        int d = (int)((num * 1717986919L) >> 34);
        sum += num - ((d << 3) + (d << 1));
        num = (int)((429496730L * num) >> 32);
    }
    return sum;
}   

// sumDigits(1234056) = 1+2+3+4+0+5+6 = 21
...
Рейтинг: 0 / 0
28.07.2015, 15:55
    #39017807
arrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Очевидно что система счисления десятичная. Число n натуральное. Только что то непонятно по какой схеме - ваш подход работает с использованием логических операции тем более здесь речь идет о числе не разложенном в двоичную систему. В общем это надо сделать без применения строк, масивов, колекций, и циклов (while тоже очевидно цыкл а то было б легче)
...
Рейтинг: 0 / 0
28.07.2015, 16:18
    #39017847
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
arrt, осталось-то немного допилить ответ от Usman:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
	public static int sumDigits(int num) {
	    int sum = 0;
	    if (num != 0) {
	    	int d = (int)((num * 1717986919L) >> 34);
	    	sum += num - ((d << 3) + (d << 1));
	        num = (int)((429496730L * num) >> 32);
	    	sum += sumDigits(num);
	    }
	    return sum;	    
	}
...
Рейтинг: 0 / 0
28.07.2015, 16:43
    #39017883
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Упрощенный вариант:

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
		
	    public static int sumDigits(int num) {
	    int sum = 0;
	    if (num != 0) {
	    	int d = num/10;
	    	sum += num%10;
	    	sum += sumDigits(d);
	    }
	    return sum;	    
	}	    
	}
...
Рейтинг: 0 / 0
28.07.2015, 16:44
    #39017888
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Внизу лишняя }. Не заметила.
...
Рейтинг: 0 / 0
28.07.2015, 17:04
    #39017919
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Код: java
1.
2.
3.
4.
5.
6.
7.
	public static int sumDigits(int num) {
	    int sum = 0;
	    if (num != 0) {
	    	sum = num%10 + sumDigits(num/10);	    	
	    }
	    return sum;	    
	}
...
Рейтинг: 0 / 0
28.07.2015, 17:05
    #39017920
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
arrtМне надо это сделать без помощи цыклов, стрингов, наверное без оператора остачи. Какие есть варианты или последний вариант единственный?

Usman был прав в том, что у него не было "оператора остачи".
...
Рейтинг: 0 / 0
28.07.2015, 17:36
    #39017957
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Избавимся от "оператора остачи":

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	public static int sumDigits(int num) {
	    int sum = 0;
	    if (num != 0) {
	    	int r = num - (num/10)*10;
	    	sum = r + sumDigits(num/10);	    	
	    }
	    return sum;	    
	}
...
Рейтинг: 0 / 0
28.07.2015, 18:55
    #39018028
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
уж тогда
Код: java
1.
2.
3.
4.
5.
6.
public static int sumDigits(int num) {
	    int sum = 0;
	    if (num != 0) {
	    	sum = num - (num/10)*10 + sumDigits(num/10);	    	
	    }
	    return sum;	
...
Рейтинг: 0 / 0
28.07.2015, 19:00
    #39018030
yelena
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
вадя, я для наглядности переменную заводила. Дескать, вот он остаток.
...
Рейтинг: 0 / 0
28.07.2015, 19:08
    #39018032
Blazkowicz
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
yelenaвадя, я для наглядности переменную заводила. Дескать, вот он остаток.
Поддерживаю. Инлайн переменных - зло.
...
Рейтинг: 0 / 0
28.07.2015, 19:39
    #39018041
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
yelenaвадя, я для наглядности переменную заводила. Дескать, вот он остаток.
ну если так...
...
Рейтинг: 0 / 0
29.07.2015, 10:50
    #39018378
arrt
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
То есть при использование оператора остатка от деления и конструкции -- if целая часть от деления не равна нулю мы можем обойтись от цыкла while? Достаточно просто если это верно. Но это тоже самое что whilе (целая часть не равна нулю). Тот же цыкл но на более базовом уровне.
...
Рейтинг: 0 / 0
29.07.2015, 12:34
    #39018518
lleming
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
arrtТо есть при использование оператора остатка от деления и конструкции -- if целая часть от деления не равна нулю мы можем обойтись от цыкла while? Достаточно просто если это верно. Но это тоже самое что whilе (целая часть не равна нулю). Тот же цыкл но на более базовом уровне.

цикл или рекурсия выбирайте сами.

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


без циклов и рекурсии если заранее известно максимальное число можно написать линейный алгоритм.
тупо для каждого разряда получить значения через деление и остаток да и сложить их все в конце.
...
Рейтинг: 0 / 0
29.07.2015, 18:58
    #39019027
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Рискну предположить что ЧИСЛО всегда (a priori) вводится в символьной форме через System.in
или какой-то EditBox в формочке. Ситуация когда ЧИСЛО вдруг (!) появилось в INT переменной
считаю немыслимой и невозможной.

Поэтому нужно с плачем и скорбью похоронить весь этот код который был приведён в топике.
Он - лажовый и вторичный.

И основать новый тренд в обсуждении с другой формулировкой. А именнр

Aльтернативный способ подсчета сумы цыфр в числе строке

Credo quia verum - Верь, ибо это истина
...
Рейтинг: 0 / 0
29.07.2015, 19:08
    #39019034
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
авторРискну предположить что ЧИСЛО всегда...
из предположения делать аксиому - ну вы гений просто
...
Рейтинг: 0 / 0
29.07.2015, 19:10
    #39019035
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
Да я гений.

Так что там с числом. Как оно попало внутрь integer?
...
Рейтинг: 0 / 0
29.07.2015, 19:12
    #39019038
Leonid Kudryavtsev
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
mayton...Ситуация когда ЧИСЛО вдруг (!) появилось в INT переменной
считаю немыслимой и невозможной....
А функция math.random ?
...
Рейтинг: 0 / 0
29.07.2015, 19:18
    #39019045
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
OMG! Это очень полезный кейс.

Я даже более скажу. Есть теорема согласно которой можно предсказать
распределение полученной суммы.
...
Рейтинг: 0 / 0
29.07.2015, 21:11
    #39019083
вадя
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
maytonДа я гений.

Так что там с числом. Как оно попало внутрь integer?
гений! читай первоисходники внимательно :)
...
Рейтинг: 0 / 0
29.07.2015, 22:22
    #39019108
mayton
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Aльтернативный способ подсчета сумы цыфр в числе
А что в твоих первоисходниках? Лишнее деление. А вот тебе хотфиксик.

Код: java
1.
2.
3.
4.
5.
6.
7.
8.
	public static int sumDigits(int num) {
	    int sum = 0;
	    if (num != 0) {
                int decade = num/10;
	    	sum = num - decade * 10 + sumDigits(decade);	    	
	    }
	    return sum;	
	}
...
Рейтинг: 0 / 0
Форумы / Java [игнор отключен] [закрыт для гостей] / Aльтернативный способ подсчета сумы цыфр в числе / 25 сообщений из 34, страница 1 из 2
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]