Комментарии 75
sprintf("%03d",12345);
+5
sprintf('%03d', 1);
-2
Я не понимаю в чём загадка. В стандартной библиотеке почти всех языков есть какой-либо аналог printf, который просто по определению для этого более чем подходит.
+10
Обратите внимание, что имеет место дробная часть. sprinf('%03d', $a); не подходит.
+1
'%03d' % 1
Ruby
-1
Хм, про дробную часть забыл. Тогда так, на вскидку
x=1.9.to_s.split('.')
"#{'%03d'%x[0]}.#{x[1]}"
0
37
согласно условию: а — число, которое нужно пребразовать, b — количество знаков в целой части
p.s. с отрицательными числами не работает, так как условия такого не было
согласно условию: а — число, которое нужно пребразовать, b — количество знаков в целой части
'0'*(b-Math.log10(x))+a.to_s rescue a
p.s. с отрицательными числами не работает, так как условия такого не было
+1
return $a<1000?substr(pow(10, $b)+$a, 1):$a;
Про отрицательные числа в задании ничего не сказано.
Про отрицательные числа в задании ничего не сказано.
+1
'1'.zfill(3)
Python
-2
PadLeft(3,«0»)
vb.net
vb.net
-1
Javascript, 58 символов:
n<100?(new Array(4-(""+parseInt(n)).length)).join('0')+n:n
-2
echo $d>99?$d:($d>9?"0".$d:"00".$d);
Без
echo
получилось 32 символа (с ;
в конце). $d — число. +3
Не надо затачивать решение под 3 цифры. 2 параметра: $a и $b.
0
echo $d>99?$d:"0".($d>9?$d:"0".$d);
Без echo 31 символ. (с
;
в конце).PS: не туда отправилось.
0
А разве не для этого нужна эта функция?
www.php.net/manual/ru/function.str-pad.php
www.php.net/manual/ru/function.str-pad.php
-1
"%0*.03f"%(int(6+log10(num+1)),num)
Python
0
38
function f($a, $b) { return sprintf("%0{$b}d",$a).strrchr($a,'.'); }
0
За что минусуете?
+2
str_pad($input, $pad_length + strlen(substr($input, strpos($input, '.'))), 0, STR_PAD_LEFT);
0
"%0*f"%(x,num)
Вывод:
hi
a= 1; f= 0001.000000
a= 2; f= 0002.000000
a= 3; f= 0003.000000
a= 0; f= 0000.000000
a= -1; f= -0001.000000
a= -2; f= -0002.000000
a= -4; f= -0004.000000
a= 56.75; f= 056.750000
a= 1.0; f= 0001.000000
a= -5.45678; f= -0005.456780
a= -7.1; f= -0007.100000
a= 470.12313; f= 470.123130
a= 5678.1; f= 5678.100000
a= -101231.121231; f= -101231.121231
Правда вот х еще…
x = len("%f"%num)
if abs(num)<100: x += 1
if abs(num)<10: x += 2
+2
Блин. Вот так:
Вывод:
Правда вот х еще…
Заодно нашел баг на хабре. Если истекло время редактирования коментария во время его собственно редактирования, то избавиться от окна редактирования уже не получится.
"%0*f"%(x,num)
Вывод:
hi
a= 1; f= 001.000000
a= 2; f= 002.000000
a= 3; f= 003.000000
a= 0; f= 000.000000
a= -1; f= -001.000000
a= -2; f= -002.000000
a= -4; f= -004.000000
a= 56.75; f= 056.750000
a= 1.0; f= 001.000000
a= -5.45678; f= -005.456780
a= -7.1; f= -007.100000
a= 470.12313; f= 470.123130
a= 5678.1; f= 5678.100000
a= -101231.121231; f= -101231.121231
Правда вот х еще…
x = len("%f"%num)
if abs(num)<10: x += 1
if abs(num)<100: x += 1
Заодно нашел баг на хабре. Если истекло время редактирования коментария во время его собственно редактирования, то избавиться от окна редактирования уже не получится.
+1
блин. я тут мучаюсь. А ОТРИЦАТЕЛЬНЫЕ-ТО НУЖНО ЧИСЛА? :-) А 0? А инты? Или только флоаты больше нуля?
ПОтому что вот на питоне сделал функцию, обрабатывающую ВСЕ варианты:
ПОтому что вот на питоне сделал функцию, обрабатывающую ВСЕ варианты:
def fff(n):
b="%+f"%n
f="%+0*f"%(len(b)+4-b.find('.'),n)
return f
0
(b-len(str(int(a))))*'0'+str(a)
где a — число, b — количество цифр в целой части.Не пинайте сильно, скорее всего я что-то не понял/что-то не учел.
Получился 31 символ
0
НЛО прилетело и опубликовало эту надпись здесь
a.zfill((b,b+2)['.' in a])
Правда, это без приведения к стрингу =/
Правда, это без приведения к стрингу =/
0
// с учетом отсутствия в задаче необходимости поддержки отрицательных чисел/пустых строк/etc:
<?php
# Короче у меня не получается =(
str_repeat(0,$b-strpos($a,'.')).$a // len = 34
# изврата ради, так как регулярок вроде бы еще не было =)
preg_replace('|^(\d+)|e',"str_pad(\$1,$b,0,0)",$a) // len = 50
0
естественно, сравнивая, чей быстрее
Что естественного в оптимизации того, что оптимизировать не нужно? Для «не нужно» определение следующее — не нужно до тех пор, пока профайлером не доказано обратное.
0
Обновил пост, там есть наше решение :)
А минусы считаю необоснованными.
А минусы считаю необоснованными.
0
Блин, я однажды вычищал эти нули (приводил к int) и думал, кто-же вставляет эти нули? :)
0
python
print "%05i%s" % (a, str(a-int(a))[1:])
0
+1
return str_pad($a|0,$b,0,0).strstr($a,'.');
43 с return
0
return str_pad('',$l-($v|1)/10,0,0).$v;
40 с return!!!
+1
return str_repeat(0,$l-($v|1)/10).$v;
38 с return
маразм крепчал))
0
Во-первых, зачем |1? Для чего чётное? Чтобы при числе 9 сбиться? :)
Во-вторых, работает только для небольшого спектра чисел. Например, 5-(38|1)/10 вернёт уже 1.2, воспримет, как 0, а на выходе останется 038.
В-число Эйлерских, последний аргумент для str_pad не нужен. Вы же пустую строку заполняете.
В-пятых, если исправить всё это, получится вполне лаконично, спасибо за идею :)
40 c return.
В-сорок вторых, вариант с repeat не работает, если получится отрицательное число в скобках.
Во-вторых, работает только для небольшого спектра чисел. Например, 5-(38|1)/10 вернёт уже 1.2, воспримет, как 0, а на выходе останется 038.
В-число Эйлерских, последний аргумент для str_pad не нужен. Вы же пустую строку заполняете.
В-пятых, если исправить всё это, получится вполне лаконично, спасибо за идею :)
return str_pad('',$b-strlen($a|0),0).$a;
40 c return.
В-сорок вторых, вариант с repeat не работает, если получится отрицательное число в скобках.
0
Ну… про отрицательные числа речь не шла, а тесты все пройдены были (:
0
Отрицательное значение $l-($v|1)/10.
Попробуйте для $l=7; $b=98;
И до сих пор интересно, что Вам сделали чётные числа :)
Попробуйте для $l=7; $b=98;
И до сих пор интересно, что Вам сделали чётные числа :)
0
($v|1)/10
я исключаю 0 из ответа))))
0
Да, красиво :) Но что с примерном для $l=7; $b=98?
$v|1; //99
($v|1)/10; //9.9
$l-($v|1)/10; //-2.9
str_pad('',$l-($v|1)/10,0,0).$v; //98
$v|1; //99
($v|1)/10; //9.9
$l-($v|1)/10; //-2.9
str_pad('',$l-($v|1)/10,0,0).$v; //98
0
суть в том, что так
я хотел получить кол-во разрядов в числе, но видно от большого ума, что-то перепутал, здесь правильнее log10() взять, а не на 10 делить)))
а что если так:
($v|1)/10
я хотел получить кол-во разрядов в числе, но видно от большого ума, что-то перепутал, здесь правильнее log10() взять, а не на 10 делить)))
а что если так:
return str_pad('',$l-log10($v|9),0).$v;
0
Зарегистрируйтесь на Хабре , чтобы оставить комментарий
У кого короче