Menerapkan fungsi divide(int a, int b, int c)
yang mencetak nilai basis 10 dari a/b
. tanpa menggunakan matematika floating point atau BigInteger
/ BigDecimal
atau perpustakaan setara apa pun. Setidaknya c
karakter yang akurat dalam himpunan 0123456789.
harus dicetak, kecuali untuk pengecualian (mungkin) pada poin 4 di bawah ini.
a
danb
bisa berupa bilangan bulat 32 bit. Pembaruan: Jika, untuk tujuan bermain golf, Anda ingin input menjadi primitif 64 bit, tidak apa-apa, tetapi Anda tidak perlu mendukung seluruh rentang data 64 bit.- Anda tidak perlu memeriksa
c
apakah positif (walaupun semoga program Anda tidak macet) jika tidak. - Batas atas minimum yang didukung
c
adalah500
. Tidak apa-apa jika program Anda tidak mendukung nilai-nilai dic
atas500
, tetapi juga tidak apa-apa jika itu benar. - Untuk angka yang membagi secara merata, adalah pilihan Anda untuk mencetak nol ekstra (berdasarkan nilai
c
) atau tidak sama sekali. - Anda tidak perlu dapat menggunakan fungsi untuk melakukan tugas lebih lanjut dengan hasil bagi, satu-satunya tujuan adalah mencetak.
- Untuk angka di antara
-1
dan1
, itu adalah pilihan Anda apakah akan mencetak pemimpin0
. Namun, ini adalah satu-satunya skenario di mana pencetakan nol depan dapat diterima, dan Anda hanya dapat mencetak satu nol tersebut. - Anda dapat menggunakan logika pembulatan / lantai / langit-langit yang Anda sukai untuk tempat desimal terakhir.
- Untuk jawaban negatif, Anda harus mencetak pemimpin
-
. Ini tidak diperhitungkanc
. Namun, itu adalah pilihan Anda jika Anda ingin mencetak,
+
atau apa-apa untuk jawaban positif. - Divisi integer dan modulus integer keduanya diperbolehkan. Namun, perlu diingat bahwa Anda dibatasi untuk primitif, kecuali jika Anda memilih untuk menerapkan sendiri
BigInteger
/BigDecimal
library yang penting terhadap panjang kode Anda. - Anda tidak perlu menangani
b
makhluk0
, meskipun Anda bisa jika mau. Program Anda dapat memasukkan loop tak terbatas, atau crash, jikab=0
, dan Anda tidak akan dihukum. - Perubahan aturan sedikit per komentar. Untuk memastikan lapangan bermain level, sementara
a
danb
dijamin bilangan bulat 32 bit, Anda dapat menggunakan bilangan bulat 64 bit. Jika bahasa yang Anda pilih melampaui bilangan bulat 64 bit sebagai primitif, Anda tidak boleh menggunakan fungsi tersebut (berpura-pura dibatasi pada 64 bit). - Poin lain yang tidak jelas (seharusnya tidak mengubah salah satu jawaban yang valid saat ini): sementara
c
dapat diartikan sebagai jumlah karakter yang dicetak atau jumlah spasi setelah desimal, program Anda harus menggunakanc
entah bagaimana dengan cara yang relevan untuk memutuskan berapa banyak karakter yang akan dicetak. Dengan kata lain,divide(2,3,2)
output harus jauh lebih pendek daripadadivide(2,3,500)
; tidak apa-apa untuk mencetak 500 karakter tanpa memperhatikanc
. - Saya sebenarnya tidak peduli dengan nama fungsinya.
d
boleh digunakan untuk bermain golf.
Memasukkan
Panggilan fungsi dan membaca dari stdin
diterima. Jika Anda membaca dari stdin
, karakter apa pun yang tidak ada dalam set [-0123456789]
dianggap sebagai pembatas argumen.
Keluaran
Karakter stdout
seperti yang dijelaskan di atas.
Contoh
karena divide(2,3,5)
, semua yang berikut ini adalah keluaran yang dapat diterima:
0.666
0.667
.6666
.6667
0.666
0.667
.6666
.6667
+0.666
+0.667
+.6666
+.6667
Contoh lain: untuk divide(371,3,5)
yang berikut ini adalah semua output yang dapat diterima:
123.6
123.7
123.6
123.7
+123.6
+123.7
123.66666
123.66667
123.66666
123.66667
+123.66666
+123.66667
Dan untuk divide(371,-3,5)
yang berikut semuanya dapat diterima:
-123.6
-123.7
-123.66666
-123.66667
92,3,5
jawabannya akan, misalnya,30.67
Jawaban:
Jawa, 92/128
Saya harus berimprovisasi sehingga
a
ataub
bisa -2147483648 sebagai bilangan bulat 32-bit positif hanya dihitung menuju 2147483647, itu sebabnyaa
menjadi along
. Mungkin ada cara yang lebih baik untuk menangani hasil negatif, tetapi saya tahu tidak ada (double
mungkin akan membuat ini berfungsiabs(a) < abs(b)
seperti yang mereka miliki-0
tetapi hanya pelengkap yang akan menjaga presisi).Mengapa angka dua byte? Saya membutuhkan 92 byte untuk perhitungan dan 36 untuk print-helper (
System.out.print
menyebalkan; umumnya Java bukan golfy).Metode ini pada dasarnya melatih apa yang sebagian besar dari kita pelajari di sekolah untuk menghasilkan angka desimal yang diminta.
sumber
Integer.MIN_VALUE
tidak baik-baik saja tetapilong
sebagai input tidak masalah.System.out
membuat Java terasa besar ;-) Masih perasaan yang baik, bahwa sudah ada jawaban lagi yang diposting.C,
989589mencetak
c
angka setelah.
contoh output:
harus bekerja untuk -2147483647 <= a <= 2147483647, sama untuk b. menangani
-
itu menyakitkan.versi online: ideone
sumber
a=-a
.printf("-")
mengembalikan 1.PHP, 108
Ia bekerja hanya dengan mengeluarkan hasil bagi
a
/b
selama satu putaranc
langkah,a
menjadi sisanya dikalikan dengan 10 pada setiap iterasi.DEMO
sumber
function d($a,$b,$c){if($a*$b<0)$a*=-print'-';for($p='.';$c--;$a*=10,$p=''){$a-=$b*$i=($a-$a%$b)/$b;echo$i.$p;}}
lihat nilai balikPython 111
Solusi ini tidak melanggar aturan yang disebutkan.
sumber
C: 72 karakter
Hampir sepenuhnya melakukan apa yang seharusnya dilakukan. Namun itu karena beberapa jawaban lain di sini memberikan nilai miring atau gagal untuk
d(-2147483648,b,c)
dand(a,-2147483648,c)
karena nilai absolut -2147483648 di luar batas untuk kata 32-bit.sumber
Perl, tanpa aritmatika, 274 byte
Ini adalah pembagian panjang Euclidean , kemungkinan untuk mengkonsumsi jumlah memori yang tidak biasa. Yang paling dekat dengan matematika pada angka floating-point adalah menggunakan operasi bit untuk menguraikannya.
Contoh:
Keluaran:
sumber
Ruby, 178
Versi online untuk pengujian.
Caranya adalah dengan mengalikan angka dengan angka yang cukup tinggi, sehingga hasilnya hanyalah kelipatan bilangan bulat dari operasi floating point. Kemudian titik dan nol harus dimasukkan di tempat yang tepat di string yang dihasilkan.
sumber
g
melampaui 64 bit untuk besarc
? Sunting: Saya pikir Anda secara implisit menggunakan diBigInteger
sinig
adalah sebuah string, tetapi sebelum Anda meneleponto_s
Anda telah membuat angka dalam memori yang melebihi ukuran 64 bitpython 92 byte:
Saya pikir lebih banyak golf mungkin .....
sumber
e
bisa melampaui 64 bit untuk c besar? Sunting: Saya pikir Anda secara implisit menggunakan diBigInteger
sini.a=5
danc=400
kemudian setelahe=10**c
, dalam heks, panjangnya adalah 333 digit. Mulai8889e7dd7f43fc2f7900bc2eac756d1c4927a5b8e56bbcfc97d39bac6936e648180f47d1396bc905a47cc481617c7...
ini lebih dari 64 bit.C 83
Ide yang sama yang saya gunakan dalam implementasi python saya
sumber
d(-2147483648,-1,10)