- 01
- 02
- 03
- 04
- 05
- 06
- 07
- 08
- 09
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
- 23
- 24
- 25
- 26
- 27
- 28
- 29
- 30
- 31
- 32
- 33
- 34
- 35
- 36
- 37
- 38
- 39
- 40
#include <iostream>
#define n 1
int main()
{
using namespace std;
cout << (n < 0 ? 1 : 0)+
((n << 1) < 0 ? 1 : 0)+
((n << 2) < 0 ? 1 : 0)+
((n << 3) < 0 ? 1 : 0)+
((n << 4) < 0 ? 1 : 0)+
((n << 5) < 0 ? 1 : 0)+
((n << 6) < 0 ? 1 : 0)+
((n << 7) < 0 ? 1 : 0)+
((n << 8) < 0 ? 1 : 0)+
((n << 9) < 0 ? 1 : 0)+
((n << 10) < 0 ? 1 : 0)+
((n << 11) < 0 ? 1 : 0)+
((n << 12) < 0 ? 1 : 0)+
((n << 13) < 0 ? 1 : 0)+
((n << 14) < 0 ? 1 : 0)+
((n << 15) < 0 ? 1 : 0)+
((n << 16) < 0 ? 1 : 0)+
((n << 17) < 0 ? 1 : 0)+
((n << 18) < 0 ? 1 : 0)+
((n << 19) < 0 ? 1 : 0)+
((n << 20) < 0 ? 1 : 0)+
((n << 21) < 0 ? 1 : 0)+
((n << 22) < 0 ? 1 : 0)+
((n << 23) < 0 ? 1 : 0)+
((n << 24) < 0 ? 1 : 0)+
((n << 25) < 0 ? 1 : 0)+
((n << 26) < 0 ? 1 : 0)+
((n << 27) < 0 ? 1 : 0)+
((n << 28) < 0 ? 1 : 0)+
((n << 29) < 0 ? 1 : 0)+
((n << 30) < 0 ? 1 : 0)+
((n << 31) < 0 ? 1 : 0)
<< endl;
return 0;
}
Для заданного пятизначного целого числа подсчитать количество его нулей.
Прямо с экзамена. Преподаватель катается по полу. Не шучу.
LispGovno 25.12.2012 18:01 # 0
bormand 25.12.2012 18:03 # +2
> ((n << 1) < 0 ? 1 : 0)+
Тонко ;)
P.S. А нули надо было в двоичном или в десятичном представлении? Тут чел походу понял, что в двоичном...
LispGovno 25.12.2012 18:21 # +1
http://liveworkspace.org/code/MTM2MT$12
roman-kashitsyn 25.12.2012 18:22 # +2
tirinox 25.12.2012 18:24 # +3
LispGovno 25.12.2012 18:31 # +1
Все по стандарту.
> Реализуй свой битсэт.
Я не велосипедист.
tirinox 25.12.2012 18:33 # +5
roman-kashitsyn 25.12.2012 18:47 # +4
Неоптимальный, но простой алгоритм на сишке. Строк столько же.
LispGovno 25.12.2012 19:10 # +1
LispGovno 25.12.2012 19:26 # 0
Для тех кто не понял 0xf+0xf+1 == N == 5 первых битов установлены в единицу, а остальные 0 == 0b11111.
roman-kashitsyn 25.12.2012 19:31 # +2
bormand 25.12.2012 19:33 # +1
LispGovno 25.12.2012 19:34 # +1
bormand
Тривиально. Фейспалм мне. :/
bormand 25.12.2012 20:17 # 0
bormand 25.12.2012 19:32 # +1
LispGovno 25.12.2012 19:37 # 0
Имхо норм:
http://liveworkspace.org/code/MjEzMz$8
bormand 25.12.2012 19:43 # +2
При этом gcc пишет:
1.cpp:8:38: предупреждение: величина сдвига вправо больше или равна ширине данного типа [по умолчанию включена]
Ой не зря я всегда боялся двигать больше чем на N-1 бит...
P.P.S. Вижуалка на 32хбитной платформе у друга выдает тож самое. Вот сишкоблядство то, даже сдвиги забагованы. (Жаль, что тут нет Тараса).
bormand 25.12.2012 19:48 # +2
greater than or equal to the length in bits of the promoted left operand.
3.14159265 25.12.2012 19:32 # +1
Но тебе я не скажу. На хацкиле лиспе битоёбство не в почёте.
Так что юзай табличку 255 значений.
bormand 25.12.2012 19:34 # +1
256битные числа? омг
3.14159265 25.12.2012 19:38 # 0
Или я не понял постановку задачи или вам непонятен вариант с таблицей.
Количество нулей или единиц для байта - не больше 8, это 3-х битные числа.
bormand 25.12.2012 19:45 # 0
UPD: Ну и кстати - на 256 значений, чтобы не делать ноль отдельным случаем.
3.14159265 25.12.2012 20:00 # +2
Typical Goomno way.
>std::bitset<5> s(~v).count()
linq-style
Пиздец. Вот собственно обыдление во всей красе.
>Ну и кстати - на 256 значений
Само собой. Очепятка.
LispGovno 25.12.2012 20:03 # +1
> linq-style
Это не скомпилируется.
Может если так только:
std::bitset<5>(~v).count()
defecate-plusplus 25.12.2012 19:53 # +2
edit: даже с учетом коммента @bormand про 32-битный гцц:
http://ideone.com/EnkgNe
bormand 25.12.2012 19:55 # +1
Беру свои слова обратно. Все ок. Но хотя при N=32 на 32хбитной платформе это все равно UB.
defecate-plusplus 25.12.2012 19:58 # 0
bormand 25.12.2012 19:59 # +2
defecate-plusplus 25.12.2012 20:02 # +1
3.14159265 25.12.2012 20:02 # +3
Вот именно. Суть С++.
bormand 25.12.2012 20:05 # +1
defecate-plusplus 25.12.2012 20:11 # +2
потому что гцц при 1 << 32 не затрудняется сразу подставить результат, а при 1 << N делает sall, который при 32 выдает тупо то, что мы видим
bormand 25.12.2012 20:15 # +3
P.S. Но из-за того, что на тех же ARM'ах все может быть совсем не так, это самый настоящий UB.
P.P.S. ARM: You can specify a shift with an immediate value (from zero to thirty one), or by a register which contains a value between zero and thirty one.
3.14159265 25.12.2012 20:46 # +2
Оно походу сдвигает на число по модулю 32.
(1 << 32) ==1
(1 << 33) ==2
https://ideone.com/1wT12n
Ждем Тараса...
bormand 25.12.2012 20:58 # +1
If the promoted type of the left-hand operand is int, only the five lowest-order bits of the right-hand operand are used as the shift distance.
If the promoted type of the left-hand operand is long, then only the six lowest-
order bits of the right-hand operand are used as the shift distance.
3.14159265 25.12.2012 21:15 # +4
Может вылезти при расширении типа портировании кода с intов на long.
https://ideone.com/PhS98F
Различие с С++: там ты дополнительно стреляешь себе в ногу, которая уже застряла в граблях.
guest 25.12.2012 21:37 # +1
Наверное, я совершенно не понимаю сути грабель...
bormand 25.12.2012 20:03 # +1
Ну-ну. UB вносит раздор в наши ряды:
http://ideone.com/MQncr8
bormand 25.12.2012 20:10 # +1
http://ideone.com/RBDiV8
И в жабе помогло:
https://ideone.com/XMbbGk
LispGovno 25.12.2012 20:19 # +1
bormand 25.12.2012 20:24 # +1
Ну вот так разве что.
А вообще ООП'а стайл:
LispGovno 25.12.2012 20:32 # +2
Jaba-style.
guest 25.12.2012 19:29 # −2
guest 25.12.2012 19:44 # −6
guest 25.12.2012 19:47 # −8
guest 25.12.2012 19:54 # −8
guest 25.12.2012 22:35 # −2
guest 25.12.2012 19:43 # +4
guest 25.12.2012 20:10 # −4
LispGovno 25.12.2012 20:21 # −1
Новый вариант. Оттуда же.
Похоже пока не удалось.
bormand 25.12.2012 20:30 # +1
LispGovno 25.12.2012 20:38 # +2
LispGovno 25.12.2012 20:40 # 0
Psionic 30.12.2012 00:46 # 0
bormand 30.12.2012 10:54 # 0
1) массив не указатель, его нельзя плюсплюсить
2) нахуя звезда в предпоследней строке, ее результат не используется
3) где звезда в while(buff) и buff == '0'
Код имеет следующие проблемы:
1) Что если число десятизначное (int на 32 битной платфоме)
2) Без звезды while(buff) является вечным циклом
Psionic 01.01.2013 16:38 # 0
guest 25.12.2012 20:41 # +4
guest 25.12.2012 20:45 # +5
3.14159265 25.12.2012 21:03 # +7
LispGovno 25.12.2012 22:47 # +1
LispGovno 29.01.2013 20:07 # 0
3.14159265 29.01.2013 20:18 # +1
Гумно везде говно найдёт.
>Почему я из него вижу только говно и пощу суда?
Почему я всё говно что вижу сразу копипащу суда?
[fixed]
bormand 29.01.2013 20:23 # +2
3.14159265 29.01.2013 20:28 # 0
LispGovno 29.01.2013 20:41 # −1
Я вас реально уважаю, ребят. Пожалуйста не давайте ссылки на такие сомнительные источники информации.