先日、化学の先生が科学表記法について説明していました(小さい数字を使用し、10の累乗を掛けて大きい数字をより簡単に表現できるようにしました)。基本を学んだ後、いくつかの典型的な数学の質問をしました。そのうちのいくつかは次のようなものでした:
科学表記法で次を表します:
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
は、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
得点
これはcode-golfなので、バイト単位の最短コードが優先されます。
その他の規則と説明
- 末尾のゼロ(および/または末尾の小数点)は、元の入力番号の文字カウントにはカウントされません
n
。テストケース6などの場合は、このことに留意してください - 入力番号が1未満の場合、1桁の数字は常に0で始まると想定できます(テストケース5〜8のように)。
- 入力番号が負になることはありません
- この挑戦を些細で標準的な抜け穴にするビルトインは許可されていません
- 出力の末尾の改行は問題ありません
編集
テストケース7および8の10のべき乗が間違っていたことを指摘してくれたuser81655に感謝します。これらを修正したので、コードがそれらを正しく評価するようにしてください。
e
:(9000 -> 9e3
ほぼ9,000を超える!)
x10^
。そして、それは質問の手直しのかなりの部分であるでしょう、私はそれが掲示されるので今それが適切であるとは思わない
pi^e^i^j^k^std::vector
がどうなるかを尋ねるべきですか?