Project euler problem 34

Post date: Aug 27, 2009 8:12:42 AM

drop table problem34

CREATE TABLE problem34 (numValue BIGINT, facSum BIGINT, isspecial bit);

GO

ALTER FUNCTION dbo.Factorial ( @iNumber BIGINT )

RETURNS BIGINT

AS

BEGIN

DECLARE @i BIGINT

SET @i =

CASE @iNumber

WHEN 1 THEN 1

WHEN 2 THEN 2

WHEN 3 THEN 6

WHEN 4 THEN 24

WHEN 5 THEN 120

WHEN 6 THEN 720

WHEN 7 THEN 5040

WHEN 8 THEN 40320

WHEN 9 THEN 362880

WHEN 0 THEN 1

ELSE 1 / 0

END

RETURN (@i)

END

GO

GO

ALTER FUNCTION CalcFacSum(@input BIGINT) RETURNS BIGINT

AS

BEGIN

DECLARE @ret BIGINT

DECLARE @str VARCHAR(20)

SET @ret = 0

SET @str = CONVERT(VARCHAR(20), @input)

WHILE LEN(@str) > 0

BEGIN

SET @ret = @ret + dbo.Factorial(CONVERT(BIGINT, LEFT(@str, 1)))

SET @str = RIGHT(@str, LEN(@str) - 1)

END

return @ret

END

GO

DECLARE @counter BIGINT

DECLARE @tmpFacSum BIGINT

DECLARE @isSpecial BIT

SET @tmpFacSum = 0

SET @counter = 3

WHILE @counter < 3628800 -- 9999999

BEGIN

SET @tmpFacSum = dbo.CalcFacSum(@counter)

SET @isSpecial =

CASE @tmpFacSum

WHEN @counter THEN 1

ELSE 0

END

IF @isSpecial = 1

INSERT INTO problem34 VALUES(@counter, @tmpFacSum, @isSpecial)

SET @counter = @counter + 1

END

select * from problem34

SELECT SUM(facSum) from problem34

--40730