用您喜欢的语言实现除法算法,该算法可以处理整数除法。它只需要处理正数-但是如果处理负数和混合符号除法,也需要加分。结果四舍五入为分数结果。
该程序可能不包含/
,\
,div
或类似的运营商。它必须是不使用语言的本机除法功能的例程。
您只需要处理32位除法。不允许使用重复减法。
输入值
在stdin上输入两个输入,并用新行或空格分隔(您的选择)
740
2
输出量
在这种情况下,输出为370
。
最短的解决方案就是胜利。
用您喜欢的语言实现除法算法,该算法可以处理整数除法。它只需要处理正数-但是如果处理负数和混合符号除法,也需要加分。结果四舍五入为分数结果。
该程序可能不包含/
,\
,div
或类似的运营商。它必须是不使用语言的本机除法功能的例程。
您只需要处理32位除法。不允许使用重复减法。
输入值
在stdin上输入两个输入,并用新行或空格分隔(您的选择)
740
2
输出量
在这种情况下,输出为370
。
最短的解决方案就是胜利。
Answers:
接受逗号分隔的输入,例如 740,2
from math import*
x,y=input()
z=int(exp(log(x)-log(y)))
print(z*y+y<=x)+z
A=Array,P=prompt,P((','+A(+P())).split(','+A(+P())).length-1)
这将使一个字符串成为被除数,,,,,,
(6)的长度,并在除数,,,
(3)上分割,从而得到一个长度为3:的数组,['', '', '']
然后将其长度减去1。绝对不是最快的,但还是很有意思!
A=Array,P=prompt,P((''+A(+P())).split(','+A(+P())).length)
$i=fgets(STDIN);$j=fgets(STDIN);$k=1;while(($a=$j*$k)<$i)$k++;echo($a>$i?--$k:$k);
但是,这是一个非常简单的解决方案-它不处理分数或不同的符号(会跳入无限循环)。我不会在这本书中详细介绍,这很简单。
输入在标准输入中,用新行分隔。
$i*=$r=($i=fgets(STDIN))<0?-1:1;$j*=$s=($j=fgets(STDIN))<0?-1:1;$k=0;$l=1;while(($a=$j*$k)!=$i){if($a>$i)$k-=($l>>=2)*2;$k+=$l;}echo$k*$r*$s;
输入和输出与上一个相同。
是的,这几乎是上一个的两倍,但是:
重新格式化并说明:
$i *= $r = ($i = fgets(STDIN)) < 0 ? -1 : 1;
$j *= $s = ($j = fgets(STDIN)) < 0 ? -1 : 1;
// First, in the parentheses, $i is set to
// GET variable i, then $r is set to -1 or
// 1, depending whether $i is negative or
// not - finally, $i multiplied by $r ef-
// fectively resulting in $i being the ab-
// solute value of itself, but keeping the
// sign in $r.
// The same is then done to $j, the sign
// is kept in $s.
$k = 0; // $k will be the result in the end.
$l = 1; // $l is used in the loop - it is added to
// $k as long as $j*$k (the divisor times
// the result so far) is less than $i (the
// divided number).
while(($a = $j * $k) != $i){ // Main loop - it is executed until $j*$k
// equals $i - that is, until a result is
// found. Because a/b=c, c*b=a.
// At the same time, $a is set to $j*$k,
// to conserve space and time.
if($a > $i) // If $a is greater than $i, last step
$k -= ($l >>= 2) * 2; // (add $l) is undone by subtracting $l
// from $k, and then dividing $l by two
// (by a bitwise right shift by 1) for
// handling fractional results.
// It might seem that using ($l>>=2)*2 here
// is unnecessary - but by compressing the
// two commands ($k-=$l and $l>>=2) into 1
// means that curly braces are not needed:
//
// if($a>$i)$k-=($l>>=2)*2;
//
// vs.
//
// if($a>$i){$k-=$l;$l>>=2;}
$k += $l; // Finally, $k is incremented by $l and
// the while loop loops again.
}
echo $k * $r * $s; // To get the correct result, $k has to be
// multiplied by $r and $s, keeping signs
// that were removed in the beginning.
(?a*a+?b).split(?a*b).size-1
其余部分,21个字符
?a*a=~/(#{?a*b})\1*$/
样品:
a = 756
b = 20
print (?a*a+?b).split(?a*b).size-1 # => 37
print ?a*a=~/(#{?a*b})\1*$/ # => 16
对于Ruby 1.8:
a = 756
b = 20
print ('a'*a+'b').split('a'*b).size-1 # => 37
print 'a'*a=~/(#{'a'*b})\1*$/ # => 16
('a'*a+'b').split('a'*b).size-1
做大3个字符。
<?$a=explode(" ",fgets(STDIN));echo$a[0]*pow($a[1],-1);
输出(740/2):http ://codepad.viper-7.com/ucTlcq
<?$a=fgetcsv(STDIN);echo$a[0]*pow($a[1],-1);
只需使用逗号而不是空格来分隔数字。
main=getLine>>=print.d.map read.words
d[x,y]=pred.snd.head.filter((>x).fst)$map(\n->(n*y,n))[0..]
输入在一行上。
该代码只是通过采用除数d
并将其乘以所有整数来搜索答案n >= 0
。设m
红利。n
这样n * d <= m
选择的最大答案就是答案。该代码实际上选择了最小的n
那个,n * d > m
并从中减去1,因为我可以从这样的列表中选取第一个元素。在另一种情况下,我必须采用最后一个元素,但是要从无限列表中选取最后一个元素是很困难的。好了,列表可以证明是有限的,但是Haskell在执行过滤器时并不了解,因此它继续不确定地过滤。
(1-(loop as x to(read)by(read)counting t))
接受空格或行分隔的输入
read x y;yes ''|head -n$x>f;ls -l --block-size=$y f|cut -d\ -f5
输出无限数量的换行符,取第一个x,将它们全部放入一个名为f的文件中,然后以y的大小为单位获取f的大小。采纳了manatwork的建议,以删除八个字符。
read x y
。如果删除了更多空格,则可以减少到64个字符:pastebin.com/Y3SfSXWk
Smalltalk,Squeak 4.x风味
在Integer中定义此二进制消息:
% d
| i |
d <= self or: [^0].
i := self highBit - d highBit.
d << i <= self or: [i := i - 1].
^1 << i + (self - (d << i) % d)
打完高尔夫球后,该商仍然很长(88个字符):
%d|i n|d<=(n:=self)or:[^0].i:=n highBit-d highBit.d<<i<=n or:[i:=i-1].^1<<i+(n-(d<<i)%d)
但这是合理的快速:
[0 to: 1000 do: [:n |
1 to: 1000 do: [:d |
self assert: (n//d) = (n%d)]].
] timeToRun.
->在我适度的Mac mini上为127毫秒(8 MOp / s)
与常规除法相比:
[0 to: 1000 do: [:n |
1 to: 1000 do: [:d |
self assert: (n//d) = (n//d)]].
] timeToRun.
-> 31毫秒,仅慢4倍
我不算读stdin或写stdout的字符,Squeak不是为脚本设计的。
FileStream stdout nextPutAll:
FileStream stdin nextLine asNumber%FileStream stdin nextLine asNumber;
cr
当然,更愚蠢的反复减法
%d self>d and:[^0].^self-d%d+1
或简单的愚蠢枚举
%d^(0to:self)findLast:[:q|q*d<=self]
也可以工作,但不是很有趣
接受逗号分隔的输入。
之所以这么说是因为markdown在列表后加上代码而死了?:
x,y=input()
print("."*x).replace("."*y,',').count(',')
int divide (int num, int divideBy)
{
int sum = 0;
int shift = divideBy -1;
while (num > divideBy) {
sum += num >> shift ;
num = (num >> shift ) + (num & divideBy);
}
if (num == divideBy) ++sum;
return sum;
}
参考:http : //www.forums.hscripts.com/viewtopic.php?f=13& t= 1358
740,2
还允许用于输入?即逗号分隔?