Inspiriert von Project Euler # 17 ist dies Ihre Herausforderung. Schreiben Sie ein vollständiges Programm oder eine Funktion, die eine Zahl als Eingabe verwendet, und geben Sie dann aus oder geben Sie zurück, wie viele Buchstaben erforderlich wären, um bis zu dieser Zahl auf Englisch zu zählen (beginnend mit einer). Sie geben keine Leerzeichen, Kommas oder Bindestriche an, aber Sie sollten das Wort eingeben and
. Beispielsweise. 342 ist geschrieben: Three Hundred and Forty-Two
. Dies ist 23 Buchstaben lang.
Ihre Eingabe wird eine positive ganze Zahl sein. Sie müssen keine ungültigen Eingaben verarbeiten. Integrierte oder Bibliotheken, die Zahlen in Englisch konvertieren, sind nicht zulässig.
Hier finden Sie alle Regeln für die Rechtschreibung von Zahlen. (Hinweis: Mir ist klar, dass einige Leute andere Regeln für die Rechtschreibung von Zahlen anwenden. Dies sind nur die offiziellen Regeln für diese Herausforderung.)
1 bis 20
eins, zwei, drei, vier, fünf, sechs, sieben, acht, neun, zehn, elf, zwölf, dreizehn, vierzehn, fünfzehn, sechzehn, siebzehn, achtzehn, neunzehn, zwanzig
21 bis 99
Mach mit bei:
Zwanzig, dreißig, vierzig, fünfzig, sechzig, siebzig, achtzig, neunzig
zu diesen:
-ein, -zwei, -drei, -vier, -fünf, -sechs, -sieben, -acht, -neun,
Beachten Sie, dass vier ein u hat, aber vierzig nicht!
Beispiele:
53: Fifty-three
60: sixty
72: seventy-two
99: ninety-nine
100 bis 999
Schreiben Sie wie oben beschrieben, wie viele Hunderte (einhundert, zweihundert, dreihundert usw.), ein " und " und den Rest der Zahl auf. Das und zählt für Ihre Briefpunktzahl.
Beispiele:
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 bis 999.999
Schreiben Sie wieviele Tausender (eintausend, zweitausend usw.), ein Komma und dann den Rest der Zahl wie oben. Beachten Sie, dass Sie, wenn Sie keine Hunderte haben, immer noch das und benötigen .
Beispiele:
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
Millionen
Schreiben Sie, wie viele Millionen, dann den Rest der Zahl wie oben. Beachten Sie, dass "A million" 6 Nullen "1,000,000" ist.
Beispiele:
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
Dieselbe Regel gilt für Milliarden, Billionen, Billionen und mehr, aber für diese Herausforderung müssen Sie keine Zahlen über 999.999.999 (neunhundertneunundneunzig Millionen, neunhundertneunundneunzigtausend, neun hundert neun und neunzig.)
Python-Löser
Hier ist ein kurzes Python-Skript, um die Antworten zu überprüfen:
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
Beachten Sie, dass dies die NodeBox-Sprachbibliothek verwendet, um Zahlen in Englisch zu konvertieren. (ja, ich brach nur meine eigene Regel, aber dies ist keine konkurrierende Antwort) Diese frei verfügbar ist hier .
Beispiel-E / A
7: 27
19: 106
72: 583
108: 1000
1337: 31,131
1234567: 63,448,174
Antworten:
Python 2,
266259236229228 BytesDies funktioniert für alle Eingaben unter einer Milliarde. Dies funktioniert für alle Testfälle.
Um es an die angegebene Frage anzupassen (z. B. Zahlen, die mit 100 enden, nicht behandeln), ersetzen Sie einfach die Nummer 101 am Ende der ersten Zeile durch 100.
Erläuterung:
quelle