有一天,我的化学老师正在向我们解释关于科学符号的知识(用一个小的数字并把它乘以十的幂来更容易地表示大数),这使我回想起我第一次学它的几年时间。在学习了基础知识之后,我们做了一系列典型的数学题,其中一些问题如下:
用科学表示法表示如下: a) 50000000 b) 1200000000000 c) d) pi^e^i^j^k^std::vector ... z) 200 .
我想,“什么?我们被告知科学符号被用来使大数的书写更有效,但有些情况下根本没有效率!”
考虑一下这个数字
300及其在科学符号中的表现:
3x10^2什么,科学标注的版本实际上占用了更多的空间?我们现在不能这样,对吧?(屏幕空间非常宝贵。)
我们可以确定用科学符号写数字是否更有空间效率,或者.
您的程序或函数应该以任意大小的单个正数n (达到您的语言所支持的范围)作为输入,并输出该数字的科学标注版本。
但是,如果原始数字n在移除尾随零和尾随小数位后,显示的字符数量比其科学标注的版本少或相同,则必须输出原始数字n。
您的代码需要尽可能短,因为输出也必须尽可能短。
有效的科学表示法定义如下:
bx10^eb是适当除以10的幂的输入数,因此1 <= b < 10。这个数字必须删除所有尾随零(如果需要的话,还必须删除小数点),但必须具有原始数字的精度(当然,在您的语言中,直到小数点限制)。Ie 90000变成9,13.500变成1.35,0.000675变成6.75等等。如果这个数字最终包含了比您的语言所能处理的更多的十进制位,那么它应该四舍五入到最大的小数位数。
e是将10提高到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,请记住这一点。编辑
感谢user81655指出了测试用例7和8有10的不正确的力量。我现在已经修复了它们,所以请确保您的代码正确地评估它们。
发布于 2016-02-13 00:36:38
Define f(x)=
Prgm
string(x)➝a
If x≥1 Then
format(x,"s")➝a
EndIf
instring(a,"ᴇ")➝b
left(a,b-1)&"x10^"&mid(a,b+1)➝a
If dim(a)<dim(string(n)) or x<1 Then
Disp a
Else
Disp x
Endif
EndPrgmIf x≥1 Then
format(x,"s")➝a
EndIf将输入转换为带有格式函数的科学符号,如果输入已经不是这种格式的话--因为小的小数被自动转换。
instring(a,"ᴇ")➝b
left(a,b-1)&"x10^"&mid(a,b+1)➝a找到表示指数的高级E的位置,并将其替换为"x10^“。
If dim(a)<dim(string(x)) or x<1 Then
Disp a
Else
Disp x
Endif检查哪个输出更大,并返回最优输出。除非它是一个小数点,在默认情况下是较小的。
https://codegolf.stackexchange.com/questions/71265
复制相似问题