O tempo foi passando e não apareceram muitas respostas, talvez por ser mais trabalhoso, não sei ao certo, mas dessa vez eu resolvi participar. As primeiras respostas foram em C++ e Python respectivamente, então para variar um pouco eu resolvi escrever um programa em Ruby para solucionar o desafio.
Minha solução para o problema foi a seguinte:
=begin
This program convert a number to words
Yuri Malheiros
December, 15th 2006
=end
class Number
def initialize(x)
@words = {
0 => 'zero', 1 => 'one', 2 => 'two', 3 => 'three',
4 => 'four', 5 => 'five', 6 => 'six', 7 => 'seven',
8 => 'eight', 9 => 'nine', 10 => 'ten', 11 => 'eleven',
12 => 'twelve', 13 => 'thirteen', 14 => 'fourteen', 15 => 'fifteen',
16 => 'sixteen', 17 => 'seventeen', 18 => 'eighteen', 19 => 'nineteen',
20 => 'twenty', 30 => 'thirty', 40 => 'forty', 50 => 'fifty',
60 => 'sixty', 70 => 'seventy', 80 => 'eighty', 90 => 'ninety',
}
@number = x
end
def string_hundred(x)
result = ''
if (x/100) >= 1 && (x/100) <= 9
result << @words[x/100] << ' hundred '
end
if (x % 100) >= 1 && (x % 100) <= 20
result << @words[x%100]
elsif (x%100/10*10) != 0
result << @words[x%100/10*10]
if (x%10) > 0
result << '-' << @words[x%10]
end
end
return result
end
def to_s
result = ''
thousands = @number % 10**6 / 1000
millions = @number % 10**9 / 10**6
if @number == 0
result << @words[0]
end
if millions >= 1 && millions <= 999
result << string_hundred(millions) << ' million '
end
if thousands >= 1 && thousands <= 999
result << string_hundred(thousands) << ' thousand '
end
result << string_hundred(@number % 1000)
end
end
print "Enter a number: "
number = gets.chomp.to_i
myNumber = Number.new(number)
puts myNumber
Esse problema poderia ser resolvido de inúmeras maneiras diferentes e provavelmente deve existir alguma com menos linhas de código, o que não necessariamente implica em um programa mais simples. Eu usei os conhecimentos que tinha sobre a linguagem e consegui um bom resultado em um tempo relativamente curto.
Quero ver agora a solução do pessoal para outras linguagens, tanto no fórum quanto nos comentários aqui do blog.
Nenhum comentário:
Postar um comentário