Tantangan
Diberi angka x
dan angka n
, angka bulat x
hingga n
angka signifikan dan hasilkan hasilnya.
Sosok penting
Angka signifikan dari angka adalah digit yang membawa makna yang berkontribusi pada resolusi pengukurannya. Ini termasuk semua angka kecuali angka nol di depan.
Ingatlah bahwa memimpin nol setelah titik desimal masih merupakan angka yang tidak signifikan .
Saat membulatkan angka, Anda harus membulatkan dari nol jika angka berikut lebih besar atau sama dengan lima.
Semua nol yang tertinggal setelah titik desimal dihitung sebagai signifikan.
Memasukkan
Angka pertama adalah x
, angka yang akan dibulatkan. Angka kedua adalah n
, jumlah angka penting yang harus dibulatkan x
.
x
akan berupa angka (kode Anda harus menangani bilangan bulat dan titik mengambang) antara -1.000.000.000 dan 1.000.000.000 inklusif. n
akan menjadi bilangan bulat positif antara 1 dan 50 inklusif. n
tidak akan pernah lebih besar dari angka digit dalam x
.
Input tidak akan pernah 0
atau dalam bentuk apa pun 0
, misalnya 0.000
atau 000
.
Contohnya
Inputs: 2.6754, 2
Output: 2.7
Output 2.7000
akan tidak valid karena trailing nol setelah titik desimal dihitung sebagai angka signifikan.
Inputs: 0.00034551, 4
Output: 0.0003455
Inputs: 50237.1238, 3
Output: 50200
Perhatikan bahwa ini tidak boleh memiliki titik desimal.
Inputs: 2374905, 1
Output: 2000000
Inputs: 543.0489, 4
Output: 543.0
Inputs: 15, 1
Output: 20
Inputs: 520.3, 3
Output: 520
Jika Anda mau, Anda bisa output 520.
saja tetapi tidak 520.0
.
Inputs: -53.87, 2
Output: -54
Inputs: 0.0999, 2
Output: 0.10
Aturan
Fungsi dan pustaka built-in yang memungkinkan Anda untuk membulatkan angka ke n
angka-angka penting dilarang.
Kemenangan
Kode terpendek dalam byte menang.
Inputs: 520.3, 3
, bukankah angka desimal dalam jawaban itu520.
penting?2.0 x 10^2
, menunjukkan 2 sigfigs.Jawaban:
Python 3, 83 byte
(mirip dengan jawaban PHP)
Kasus uji:
Keluaran:
Selain sedikit lebih lama, pendekatan lain yang saya pertimbangkan:
... menghasilkan output yang salah untuk input (15, 1):
... karena ketidaktepatan floating point dalam
round()
fungsi. Tampaknya bagi saya bahwa saya dapat menemukan kasus uji yang akan memecahkan metode "putaran ke nol desimal" juga jika saya terlihat cukup keras.Jadi, bagi saya tampaknya solusi saya mungkin tidak 100% benar untuk semua kasus dan tidak akan kecuali jika dihitung dalam desimal. Karena itu masalah ini dapat memengaruhi solusi dalam bahasa apa pun yang menggunakan aritmatika FP.
sumber
s
pada baris yang sama, lalu gunakan titik koma.def s(x,n):y=10**(ceil(log10(abs(x)))-n);return y*round(x/y)
import *
untuk membuatnyaimport*
round()
Fungsi membulatkan ken
tempat desimal, bukan ken
angka signifikan, sehingga diizinkan untuk acara golf ini.PHP, 130 Bytes
PHP, 133 Bytes bekerja dengan nilai <1 untuk angka signifikan
PHP, 56 Bytes berfungsi tetapi lewati angka nol yang tidak perlu
Seseorang telah mencuri atau menghapus fungsi bundar di PHP! Untuk membuat tantangan lebih menarik. 127 Bytes
sumber
Batch,
660652 bytePenjelasan: Mulai dengan suffixing
.
ke parameter seandainya belum memilikinya, kemudian potong tanda (yang disimpan) dan nol di depan. Variabel yang dihasilkanm
disimpan untuk nanti karena akan memberi tahu kami besarnya hasil yang diinginkan. Apa.
pun kemudian dihapus, yang bisa menghasilkan angka nol lebih lanjut, sehingga mereka juga dihapus.n
nol adalah suffix untuk memastikan bahwa ada cukup digit untuk dibulatkan, lalu digit ke-1n
dan pertaman
diekstraksi. Jikan
digit ke-4 atau kurang dari itu maka kita dengan susah payah menambah1
string. Jika string meluap maka kita meningkatkan besarnya dengan awalan a1
, tetapi jika awalnya kurang dari0.1
kita melakukannya dengan menghapus1
kita baru saja menambahkan dan juga0
setelah titik desimal. Jika besarnya masih kurang dari1
maka kita menyalin nol setelah titik desimal ke hasilnya, namun jika itu1
atau lebih maka kita mengekstrak bagian bilangan bulat dari jawaban, menambahkan nol tambahan jika perlu untuk mencapai titik desimal (yang kemudian dihapus karena akan menunjukkan presisi yang salah). Akhirnya tanda, bagian bilangan bulat, titik desimal dan bagian desimal disatukan.sumber