แรงบันดาลใจจากProject Euler # 17นี่คือความท้าทายของคุณ เขียนโปรแกรมหรือฟังก์ชั่นเต็มรูปแบบที่ใช้ตัวเลขเป็นอินพุตจากนั้นพิมพ์หรือส่งคืนจำนวนตัวอักษรที่ใช้ในการนับและรวมถึงตัวเลขนั้นเป็นภาษาอังกฤษ (เริ่มต้นที่หนึ่ง) คุณไม่ได้มีช่องว่างจุลภาคหรือยัติภังค์ and
แต่คุณควรจะรวมถึงคำว่า ตัวอย่างเช่น. 342 Three Hundred and Forty-Two
สะกด: ความยาว 23 ตัวอักษร
ข้อมูลที่คุณป้อนจะเป็นจำนวนเต็มบวก คุณไม่ต้องจัดการอินพุตที่ไม่ถูกต้อง ไม่อนุญาตให้ใช้บิวด์อินหรือไลบรารี่ที่แปลงตัวเลขเป็นภาษาอังกฤษ
นี่คือกฎทั้งหมดสำหรับวิธีสะกดหมายเลข (หมายเหตุ: ฉันรู้ว่าบางคนใช้ชุดของกฎที่แตกต่างกันสำหรับวิธีการสะกดหมายเลขนี่จะเป็นกฎอย่างเป็นทางการสำหรับจุดประสงค์ของการท้าทายนี้)
1 ถึง 20
หนึ่ง, สอง, สาม, สี่, ห้า, หก, เจ็ด, แปด, เก้า, สิบเอ็ด, สิบสอง, สิบสาม, สิบสี่, สิบห้า, สิบห้า, สิบหก, สิบหก, สิบเจ็ด, สิบแปด, สิบเก้า, ยี่สิบ
21 ถึง 99
เข้าร่วมเหล่านี้:
ยี่สิบ, สามสิบ, สี่สิบ, ห้าสิบ, หกสิบ, เจ็ดสิบ, แปดสิบ, เก้าสิบ
ถึงสิ่งเหล่านี้:
-one, -two,-สาม, -four, -five, -six, -seven, -eight, -nine,
โปรดทราบว่าสี่มีuแต่สี่สิบไม่!
ตัวอย่าง:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 ถึง 999
เขียนจำนวนร้อย (หนึ่งร้อยสองร้อยสามร้อย ฯลฯ ), " และ " และจำนวนที่เหลือดังกล่าวข้างต้น และไม่นับรวมคะแนนจดหมายของคุณ
ตัวอย่าง:
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 ถึง 999,999
เขียนจำนวนคอมม่า (หนึ่งพันสองพัน ฯลฯ ) จำนวนคอมม่าจากนั้นส่วนที่เหลือตามข้างต้น โปรดทราบว่าหากคุณมีหลายร้อยคุณยังคงต้องและ
ตัวอย่าง:
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
ล้าน
เขียนว่ามีกี่ล้านแล้วจึงเหลือตัวเลขดังกล่าวข้างต้น โปรดทราบว่า "A ล้าน" คือ 6 ศูนย์ "1,000,000"
ตัวอย่าง:
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
กฎเดียวกันนี้ใช้กับพันล้านล้านล้านสี่เท่าและสูงกว่า แต่สำหรับจุดประสงค์ของการท้าทายนี้คุณไม่ต้องจัดการกับตัวเลขใด ๆ ที่สูงกว่า 999,999,999 (เก้าร้อยเก้าสิบเก้าล้านเก้าแสนเก้าหมื่นเก้าพัน) เก้าร้อยเก้าสิบเก้า)
งูหลามแก้
นี่เป็นสคริปต์ python สั้น ๆ เพื่อตรวจสอบคำตอบ:
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
โปรดทราบว่านี่ใช้ไลบรารีภาษาศาสตร์ NodeBox เพื่อแปลงตัวเลขเป็นภาษาอังกฤษ (ใช่ฉันเพียงยากไร้กฎของตัวเอง แต่นี้ไม่ได้เป็นคำตอบของการแข่งขัน) นี้สามารถใช้ได้อย่างอิสระที่นี่
ตัวอย่าง I / O
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174