U E D R , A S I H C RSS

최소정수의합/임인택2

~cpp 

roots a b c =
	let
		det = sqrt(b*b - 4*a*c) 
		twice_a = 2 * a
	in ((-b+det)/twice_a,
		(-b+det)/twice_a)

minint val =
	let
		rnd = round (fst (roots 1.0 1.0 (-2*val) ) )
	in
		(rnd, toRational (rnd*(rnd+1))/2)

1~N 까지 합 구하는 부분을

~cpp 
mysum 1 = 1
mysum n = n + mysum (n-1)

로 정의했다가 이전에 작성했던데로 gauss 의 방법을 이용하여,
~cpp 
mysum n = n * (n+1) / 2
로 바꾸었더니 type error가 났다. 이유인즉,
~cpp 
rnd = round (fst (roots 1.0 1.0 (-2*val) ) )
에서 rnd의 타입이 Integer로 되었는데 Integer는 다른 값으로 나눠지지 않았다(내가 방법을 모르고 있을수도 있겠지만). haskell wiki를 뒤져 toRational 이라는 함수를 찾았지만 출력되는 모양이 영 마음에 들지 않는다.

HaskellLanguage 에서는 다른 언어와 달리 형 변환이 잘 안된다. 왜 이렇게 만들어놓았을까?

Valid XHTML 1.0! Valid CSS! powered by MoniWiki
last modified 2021-02-07 05:31:17
Processing time 0.0077 sec