SQL and Roman Numerals

I read a blog post where an interviewer would have applicants write code to convert a Roman numeral into a number. That sounded like an interesting problem, so here’s the SQL solution I came up with:

declare @RomanNumeral varchar(10) = ‘LIX’

declare @Length int
set @Length = len(@RomanNumeral)
declare @Counter int = 1
declare @Character char(1)
declare @CurrentValue int = 0
declare @LastValue int = 0
declare @Value int = 0

while (@Counter <= @Length)
begin
set @Character = substring(@RomanNumeral, @Counter, 1)
set @CurrentValue =
(case when @Character = ‘I’ then 1
when @Character = ‘V’ then 5
when @Character = ‘X’ then 10
when @Character = ‘L’ then 50
when @Character = ‘C’ then 100
when @Character = ‘D’ then 500
when @Character = ‘M’ then 1000
else 0 end)

if @LastValue = 0
begin
set @LastValue = @CurrentValue
end
else if (@LastValue >= @CurrentValue)
begin
set @Value += @LastValue
set @LastValue = @CurrentValue
end
else if (@LastValue <= @CurrentValue)
begin
set @Value += (@CurrentValue – @LastValue)
set @LastValue = 0
end

— For next loop
set @Counter = @Counter + 1
end

if @LastValue > 0
set @Value += @LastValue

select @RomanNumeral as RomanNumeral, @Value as ‘Answer’
go


Advertisements

Leave a Reply

Fill in your details below or click an icon to log in:

WordPress.com Logo

You are commenting using your WordPress.com account. Log Out / Change )

Twitter picture

You are commenting using your Twitter account. Log Out / Change )

Facebook photo

You are commenting using your Facebook account. Log Out / Change )

Google+ photo

You are commenting using your Google+ account. Log Out / Change )

Connecting to %s

%d bloggers like this: