前几天,我的化学老师向我们解释了科学记数法(使用小数并乘以十的幂可以更轻松地表达大数),这使我回到了几年前。在学习了基础知识之后,我们做了很多典型的数学问题,其中一些问题如下:
用科学计数法表示以下内容:
a)50000000
b)120000000000000
c)90000000000000000000000000000000000000
d)pi ^ e ^ i ^ j ^ k ^ std :: vector
...
z)200
...
我想:“什么?我们被告知,科学记数法被用来提高书写效率,但是某些情况下根本没有效率!”
考虑数字
300
及其科学表示法:
3x10^2
什么,科学标记的版本实际上会占用更多空间?现在我们不能拥有它了吗?(屏幕空间是宝贵的。)
我们可以确定自己是否可以用科学计数法写数字更节省空间,或者...
任务
您的程序或函数应输入n
任意大小的正数(取决于语言所支持的大小),并输出科学编号的数字。
但是,如果n
在删除尾随零和尾随小数位后,原始数字显示的字符数少于或等于其科学标记版本的字符数,则必须输出该原始数字n
。
您的代码必须尽可能短,因为输出也必须尽可能短。
技术指标
高效科学计数法定义如下:
bx10^e
b
是输入数除以10的幂以得出的值1 <= b < 10
。该数字必须删除所有结尾的零(如果需要,还包括小数点),但必须具有原始数字的精度(当然,要达到您语言中的小数点限制)。也就是说,90000
变成9
,13.500
变成1.35
,0.000675
变成6.75
等。如果该数字最终包含的小数位数超出了您的语言所能处理的范围,则应四舍五入到最大小数位数。
e
是将十提高到的指数n = b x 10^e
(请记住,如果n
小于1 ,则此数字必须为负)。此数字不应有任何尾随零或小数点(主要是因为如果它不是整数,那是错误的...)。
字符x10^
必须保留在b
和之间的字符串中e
。
测试用例
Input -> output
1 -> 1
20 -> 20
3000000 -> 3x10^6
400000 -> 400000
0.008093 -> 0.008093
0.007835000000000 -> 0.007835
0.000003000000 -> 3x10^-6
0.00000065 -> 6.5x10^-7
0 -> 0
计分
这是代码高尔夫球,因此以字节为单位的最短代码获胜。
其他规则和说明
- 尾随零(和/或尾随小数位)不计入原始输入数字的字符数
n
。对于测试用例6这样的情况,请记住这一点 - 您可以假设,如果输入数字小于1,则对于位数字总是以0开头(如测试用例5-8)。
- 输入数字永远不会为负
- 不允许使挑战变得微不足道的内置插件和标准漏洞
- 输出中的尾随换行符可以
编辑
感谢user81655指出测试用例7和8具有错误的10的幂。现在,我已修复了这些问题,因此请确保您的代码正确评估了它们。
e
:(9000 -> 9e3
几乎超过9,000个!)
x10^
。在这个问题上,这将是相当多的返工,因为它已经发布,我认为这不合适吗
pi^e^i^j^k^std::vector
是什么吗?