- 1
int c = ((i-(i%(int)pow(10,p)))/(int)pow(10,p))%10;
Нашли или выдавили из себя код, который нельзя назвать нормальным, на который без улыбки не взглянешь? Не торопитесь его удалять или рефакторить, — запостите его на говнокод.ру, посмеёмся вместе!
+105
int c = ((i-(i%(int)pow(10,p)))/(int)pow(10,p))%10;
Выделение из числа I цифры, стоящей на месте P с конца.
=>
i = 1234, p = 2, c => 2
TarasB 16.03.2011 10:01 # +2
Вычитать остаток перед делением...
Автор не тот же, который обнуляет биты перед сдвигом?
danilissimus 16.03.2011 10:12 # 0
Lure Of Chaos 16.03.2011 16:51 # +2
TarasB 16.03.2011 17:08 # −5
danilissimus 16.03.2011 17:12 # 0
а касты там просто так чтоли стоят?
Lure Of Chaos 16.03.2011 17:13 # +4
danilissimus 16.03.2011 17:16 # 0
bugmenot 16.03.2011 17:18 # 0
даже в паскале так можно :-P
danilissimus 16.03.2011 17:23 # 0
bugmenot 16.03.2011 17:40 # 0
тупекаст округляет вниз же
danilissimus 16.03.2011 19:14 # 0
>pow(10, p);
и то и то - целые числа.
bugmenot 16.03.2011 19:28 # 0
burdakovd 16.03.2011 21:28 # +5
Float: 1; Double: 1
Float: 10; Double: 10
Float: 100; Double: 100
Float: 1000; Double: 1000
Float: 10000; Double: 10000
Float: 100000; Double: 100000
Float: 1000000; Double: 1000000
Float: 10000000; Double: 10000000
Float: 100000000; Double: 100000000
Float: 1000000000; Double: 1000000000
Float: 10000000000; Double: 10000000000
Float: 99999997952; Double: 100000000000
Float: 999999995904; Double: 1000000000000
Float: 9999999827968; Double: 10000000000000
Float: 100000000376832; Double: 100000000000000
Float: 999999986991104; Double: 1000000000000000
Float: 10000000272564224; Double: 10000000000000000
Float: 99999998430674944; Double: 100000000000000000
Float: 999999984306749440; Double: 1000000000000000000
Таким образом если мы используем double и кастуем 64битные числа вида pow(10, i) то всё будет ОК.
Но в общем случае (при использовании float, или при использовании бОльших чисел могут быть фэйлы).
burdakovd 16.03.2011 21:30 # 0
TheCalligrapher 16.03.2011 19:05 # −1
Напомню, что будет ли целое число представлено точно в формате типа `double` зависит от ширины мантиссы двоичного представления данного числа. Если это представление помещается в мантиссу `double`- то все в порядке, а если нет - то представление будет неточным. С `1000.0` все хорошо. А вот с бОльшими числами, пусть даже "круглыми" с десятичной точки зрения, могут возникнуть проблемы. Я не проверял, на каком значении вида `10...0.0` они возникнут, т.е. может быть тут в этом плане все порядке (для разумных значений индекса `p` в случае, скажем, 64-битного `int`). Но тем не менее...
absolut 16.03.2011 17:54 # +2
nil 17.03.2011 02:03 # +3
istem 17.03.2011 02:47 # 0
zooz13 17.03.2011 03:43 # 0
TarasB 17.03.2011 12:50 # 0
А в Аде уже запрещено.
danilissimus 17.03.2011 12:54 # +1
absolut 17.03.2011 12:59 # 0
TarasB 17.03.2011 15:59 # 0
6a6yuH 24.08.2021 21:46 # 0