class String
def to_sci
num = self
num += '.0' unless num.include?('.')
negative = num.slice!(0) if num[0] == '-'
negative ||= false
num.prepend('0') if num[0] == '.'
raise "Must be a non-zero number I can turn into scientific notation" unless num.delete('1234567890-') == '.' && num =~ /\A(0[\.].*[1-9]|[1-9])/
e = num.match(/((?<=0[\.])0*[1-9]|(?<=[1-9])\d*(?=[\.]))/)[0].length.to_s
simple = num.delete('.').scan(/[1-9]\d*(?=0*)/)[0].insert(1,'.')
simple.prepend('-') if negative #if the number's negative, add the proper sign
e.prepend('-') if num =~ /\A-?0/ #it's negative sci-notation, so add a sign =)
return "#{simple} x 10^#{e}"
end
end
input = ''
num = (rand(1509290) / rand(100).to_f).to_s
num = input if input != ''
puts "#{num}: #{num.to_sci}"
Y2xhc3MgU3RyaW5nCiAgICBkZWYgdG9fc2NpCiAgICAgICAgbnVtID0gc2VsZgogICAgICAgIG51bSArPSAnLjAnIHVubGVzcyBudW0uaW5jbHVkZT8oJy4nKQogICAgICAgIG5lZ2F0aXZlID0gbnVtLnNsaWNlISgwKSBpZiBudW1bMF0gPT0gJy0nCiAgICAgICAgbmVnYXRpdmUgfHw9IGZhbHNlCiAgICAgICAgbnVtLnByZXBlbmQoJzAnKSBpZiBudW1bMF0gPT0gJy4nCiAgICAgICAgcmFpc2UgIk11c3QgYmUgYSBub24temVybyBudW1iZXIgSSBjYW4gdHVybiBpbnRvIHNjaWVudGlmaWMgbm90YXRpb24iIHVubGVzcyBudW0uZGVsZXRlKCcxMjM0NTY3ODkwLScpID09ICcuJyAmJiBudW0gPX4gL1xBKDBbXC5dLipbMS05XXxbMS05XSkvCiAgICAgICAgZSA9IG51bS5tYXRjaCgvKCg/PD0wW1wuXSkwKlsxLTldfCg/PD1bMS05XSlcZCooPz1bXC5dKSkvKVswXS5sZW5ndGgudG9fcwogICAgICAgIHNpbXBsZSA9IG51bS5kZWxldGUoJy4nKS5zY2FuKC9bMS05XVxkKig/PTAqKS8pWzBdLmluc2VydCgxLCcuJykKICAgICAgICBzaW1wbGUucHJlcGVuZCgnLScpIGlmIG5lZ2F0aXZlICNpZiB0aGUgbnVtYmVyJ3MgbmVnYXRpdmUsIGFkZCB0aGUgcHJvcGVyIHNpZ24KICAgICAgICBlLnByZXBlbmQoJy0nKSBpZiBudW0gPX4gL1xBLT8wLyAjaXQncyBuZWdhdGl2ZSBzY2ktbm90YXRpb24sIHNvIGFkZCBhIHNpZ24gPSkKICAgICAgICByZXR1cm4gIiN7c2ltcGxlfSB4IDEwXiN7ZX0iCiAgICBlbmQKZW5kCmlucHV0ID0gJycKICAgIG51bSA9IChyYW5kKDE1MDkyOTApIC8gcmFuZCgxMDApLnRvX2YpLnRvX3MKICAgIG51bSA9IGlucHV0IGlmIGlucHV0ICE9ICcnCiAgICBwdXRzICIje251bX06ICN7bnVtLnRvX3NjaX0iICAgIA==