Terinspirasi oleh Project Euler # 17 , ini adalah tantangan Anda. Tulis program atau fungsi lengkap yang menggunakan angka sebagai input, lalu cetak atau kembalikan jumlah huruf yang diperlukan untuk menghitung dan memasukkan angka itu dalam bahasa Inggris (mulai dari satu). Anda tidak memasukkan spasi, koma, atau tanda hubung, tetapi Anda harus memasukkan kata and
. Sebagai contoh. 342 dieja: Three Hundred and Forty-Two
. Ini panjangnya 23 huruf.
Masukan Anda akan berupa bilangan bulat positif. Anda tidak harus menangani input yang tidak valid. Built-in atau perpustakaan yang mengonversi angka ke bahasa Inggris tidak diperbolehkan.
Berikut ini semua aturan cara mengeja angka. (Catatan: Saya menyadari bahwa beberapa orang menggunakan seperangkat aturan berbeda untuk cara mengeja angka. Ini hanya akan menjadi aturan resmi untuk tujuan tantangan ini)
1 hingga 20
satu, dua, tiga, empat, lima, enam, tujuh, delapan, sembilan, sepuluh, sebelas, dua belas, tiga belas, empat belas, lima belas, enam belas, tujuh belas, delapan belas, sembilan belas, dua puluh
21 hingga 99
Bergabunglah dengan ini:
Dua puluh, tiga puluh, empat puluh, lima puluh, enam puluh, tujuh puluh, delapan puluh, sembilan puluh
kepada ini:
-satu, -dua, -tiga, -Empat, -five, -six, -seven, -delapan, -nine,
Perhatikan bahwa empat memiliki u tetapi empat puluh tidak!
Contoh:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 hingga 999
Tulis berapa ratus (seratus, dua ratus, tiga ratus, dll.), Sebuah " dan ", dan sisanya dari angka seperti di atas. The dan melakukan penghitungan terhadap skor surat Anda.
Contoh:
101: One hundred and one
116: One hundred and sixteen
144: One hundred and forty-four
212: Two hundred and twelve
621: Six Hundred and twenty-one
1.000 hingga 999.999
Tulis berapa ribu (seribu, dua ribu, dll.), Koma, lalu sisa angka seperti di atas. Perhatikan bahwa jika Anda tidak memiliki ratusan, Anda masih memerlukan dan .
Contoh:
1,101: One thousand, one hundred and one
15,016: Fifteen thousand and sixteen
362,928: Three hundred and sixty-two thousand, nine hundred and twenty-eight
Jutaan
Tuliskan berapa jutaan, lalu sisa angkanya seperti di atas. Perhatikan bahwa "Satu juta" adalah 6 nol "1.000.000".
Contoh:
191,232,891: One hundred and ninety-one million, two hundred and thirty-two thousand, eight hundred and ninety-one
1,006,101: One million, six thousand, one hundred and one
Aturan yang sama berlaku untuk miliaran, triliunan, kuadrili dan di atas, tetapi untuk tujuan tantangan ini, Anda tidak harus menangani angka di atas 999.999.999 (Sembilan Seratus sembilan puluh sembilan juta, sembilan ratus sembilan puluh sembilan ribu, sembilan ratus sembilan puluh sembilan.)
Pemecah python
Berikut ini adalah skrip python pendek untuk memverifikasi jawaban:
import en
def get_letter_num(s):
count = 0
for c in s:
if c.isalpha():
count += 1
return count
number = input()
count = 0
for i in xrange(1, number + 1):
count += get_letter_num(en.number.spoken(i))
print count
Perhatikan bahwa ini menggunakan perpustakaan lodeistik NodeBox untuk mengkonversi angka ke bahasa Inggris. (ya, saya baru saja melanggar aturan saya sendiri, tetapi ini bukan jawaban yang bersaing) Ini tersedia secara bebas di sini .
Contoh I / O
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174
Jawaban:
Python 2,
266259236229228 byteIni bekerja untuk semua input di bawah satu miliar. Ini berfungsi untuk semua kasus uji.
Untuk memodifikasinya agar sesuai dengan pertanyaan sebagaimana dinyatakan (mis. Jangan perlakukan angka yang diakhiri dengan 100 spesial) cukup ganti angka 101 di akhir baris pertama dengan 100.
Penjelasan:
sumber