powered by simpleCommunicator - 2.0.61     © 2026 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / Java [игнор отключен] [закрыт для гостей] / Aльтернативный способ подсчета сумы цыфр в числе
34 сообщений из 34, показаны все 2 страниц
Aльтернативный способ подсчета сумы цыфр в числе
    #39010756
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Мне надо это сделать без помощи цыклов, стрингов, наверное без оператора остачи. Какие есть варианты или последний вариант единственный?
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39010782
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Aльтернативный способ подсчета сумы цыфр в числе
    #39010783
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
примерно так, где-то или около :)
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39010794
Фотография Изопропил
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrt,

представление числа?
основание системы счисления?
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39010811
Фотография Usman
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
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
Aльтернативный способ подсчета сумы цыфр в числе
    #39017807
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Очевидно что система счисления десятичная. Число n натуральное. Только что то непонятно по какой схеме - ваш подход работает с использованием логических операции тем более здесь речь идет о числе не разложенном в двоичную систему. В общем это надо сделать без применения строк, масивов, колекций, и циклов (while тоже очевидно цыкл а то было б легче)
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39017847
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
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
Aльтернативный способ подсчета сумы цыфр в числе
    #39017883
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Упрощенный вариант:

Код: 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
Aльтернативный способ подсчета сумы цыфр в числе
    #39017888
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Внизу лишняя }. Не заметила.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39017919
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Код: 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
Aльтернативный способ подсчета сумы цыфр в числе
    #39017920
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
arrtМне надо это сделать без помощи цыклов, стрингов, наверное без оператора остачи. Какие есть варианты или последний вариант единственный?

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

Код: 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
Aльтернативный способ подсчета сумы цыфр в числе
    #39018028
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
уж тогда
Код: 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
Aльтернативный способ подсчета сумы цыфр в числе
    #39018030
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
вадя, я для наглядности переменную заводила. Дескать, вот он остаток.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39018032
Фотография Blazkowicz
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelenaвадя, я для наглядности переменную заводила. Дескать, вот он остаток.
Поддерживаю. Инлайн переменных - зло.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39018041
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
yelenaвадя, я для наглядности переменную заводила. Дескать, вот он остаток.
ну если так...
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39018378
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
То есть при использование оператора остатка от деления и конструкции -- if целая часть от деления не равна нулю мы можем обойтись от цыкла while? Достаточно просто если это верно. Но это тоже самое что whilе (целая часть не равна нулю). Тот же цыкл но на более базовом уровне.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39018518
lleming
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
arrtТо есть при использование оператора остатка от деления и конструкции -- if целая часть от деления не равна нулю мы можем обойтись от цыкла while? Достаточно просто если это верно. Но это тоже самое что whilе (целая часть не равна нулю). Тот же цыкл но на более базовом уровне.

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

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


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

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

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

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

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

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

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

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

Код: 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
Aльтернативный способ подсчета сумы цыфр в числе
    #39019123
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
авторМне надо это сделать без помощи цыклов, стрингов,
а лишнее деление - это уже варианты тонкости реализации.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39019131
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Дьявол в деталях бро. Ты запилил рекурсию. ОК. Будь добр сотвори идеальное!

Per aspera ad astra - через тернии к звездам!
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39019173
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
mayton,
рекурсия - тот же цикл, что не по тз ТС. поэтому об идеальном разговора нет.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39019477
Фотография mayton
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Итерация свойственна человеку, рекурсия божественна

— L. Peter Deutsch
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39020490
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Все таки ваши 3 точки настораживают. Как бы напрашивается какое то условие цикла. Если это рекурсия так поместите полностью код в готовый пример а то только инлайн функция.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39020824
Partisan M
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
вадярекурсия - тот же цикл, что не по тз ТС.

Неправильное мнение. Программисту следует понимать различие между свойствами рекурсии и итерации и правильно выбирать между ними. В данном случае задача не имеет практического смысла, но ТЗ было проверкой - догадается ли субъект применить рекурсию.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39020838
вадя
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Partisan Mвадярекурсия - тот же цикл, что не по тз ТС.

Неправильное мнение. Программисту следует понимать различие между свойствами рекурсии и итерации и правильно выбирать между ними. В данном случае задача не имеет практического смысла, но ТЗ было проверкой - догадается ли субъект применить рекурсию.
с точки зрения реализации - да, две разные вещи.
с логической - одинаковы - перебор до выполнения условия.
то, что тз - проверка, скорее всего.
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39021057
arrt
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Интересные фразы:субьект, ТЗ. Но здесь приведена инлайн функция-- а будет ли она работать на практике. И без условия начала и конца итераций должны быть заданы
...
Рейтинг: 0 / 0
Aльтернативный способ подсчета сумы цыфр в числе
    #39021062
yelena
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
arrt, а слабо проверить, будет ли код работать на практике?
Если вы языка Java не знаете, то что вы делаете на этом форуме?
Спросите у гугла "java recursion" - он вам все расскажет.

Сразу вам скажу, что у некоторых приведенный в теме код работает.
Осталось только пожаловаться модератору, чтобы тему закрыли.
Автор похож на тролля.
...
Рейтинг: 0 / 0
34 сообщений из 34, показаны все 2 страниц
Форумы / Java [игнор отключен] [закрыт для гостей] / Aльтернативный способ подсчета сумы цыфр в числе
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


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