首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >有效科学表示法

有效科学表示法
EN

Code Golf用户
提问于 2016-02-06 06:35:34
回答 1查看 724关注 0票数 12

有一天,我的化学老师正在向我们解释关于科学符号的知识(用一个小的数字并把它乘以十的幂来更容易地表示大数),这使我回想起我第一次学它的几年时间。在学习了基础知识之后,我们做了一系列典型的数学题,其中一些问题如下:

用科学表示法表示如下: a) 50000000 b) 1200000000000 c) d) pi^e^i^j^k^std::vector ... z) 200 .

我想,“什么?我们被告知科学符号被用来使大数的书写更有效,但有些情况下根本没有效率!”

考虑一下这个数字

代码语言:javascript
运行
复制
300

及其在科学符号中的表现:

代码语言:javascript
运行
复制
3x10^2

什么,科学标注的版本实际上占用了更多的空间?我们现在不能这样,对吧?(屏幕空间非常宝贵。)

我们可以确定用科学符号写数字是否更有空间效率,或者.

任务

您的程序或函数应该以任意大小的单个正数n (达到您的语言所支持的范围)作为输入,并输出该数字的科学标注版本。

但是,如果原始数字n在移除尾随零和尾随小数位后,显示的字符数量比其科学标注的版本少或相同,则必须输出原始数字n

您的代码需要尽可能短,因为输出也必须尽可能短。

Specifications

有效的科学表示法定义如下:

代码语言:javascript
运行
复制
bx10^e

b是适当除以10的幂的输入数,因此1 <= b < 10。这个数字必须删除所有尾随零(如果需要的话,还必须删除小数点),但必须具有原始数字的精度(当然,在您的语言中,直到小数点限制)。Ie 90000变成913.500变成1.350.000675变成6.75等等。如果这个数字最终包含了比您的语言所能处理的更多的十进制位,那么它应该四舍五入到最大的小数位数。

e是将10提高到n = b x 10^e的指数(请记住,如果n小于1,则该数字必须为负数)。这个数字不应该有任何尾随零或小数位(主要是因为如果它不是整数,那么就错了.)。

字符x10^必须保持在be之间的字符串中。

测试用例

代码语言:javascript
运行
复制
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,那么对于1位数字,它总是以0开头(如测试用例5-8)。
  • 输入号码永远不会是负数。
  • 使这一挑战变得微不足道和标准漏洞的内置是不允许的。
  • 输出中的尾换行符是OK的

编辑

感谢user81655指出了测试用例7和8有10的不正确的力量。我现在已经修复了它们,所以请确保您的代码正确地评估它们。

EN

回答 1

Code Golf用户

发布于 2016-02-13 00:36:38

TI BASIC (nspire):112个字节

代码语言:javascript
运行
复制
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
EndPrgm

解释

代码语言:javascript
运行
复制
If x≥1 Then
format(x,"s")➝a
EndIf

将输入转换为带有格式函数的科学符号,如果输入已经不是这种格式的话--因为小的小数被自动转换。

代码语言:javascript
运行
复制
instring(a,"ᴇ")➝b
left(a,b-1)&"x10^"&mid(a,b+1)➝a

找到表示指数的高级E的位置,并将其替换为"x10^“。

代码语言:javascript
运行
复制
If dim(a)<dim(string(x)) or x<1 Then
Disp a
Else
Disp x
Endif

检查哪个输出更大,并返回最优输出。除非它是一个小数点,在默认情况下是较小的。

票数 2
EN
页面原文内容由Code Golf提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://codegolf.stackexchange.com/questions/71265

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档