Number names: Difference between revisions

Undo revision 77936 by Demivec (Talk)
(→‎{{header|PureBasic}}: Increased the range of accepted numbers (!!!))
(Undo revision 77936 by Demivec (Talk))
Line 861:
print num2en(123456789), "\n";</lang>
=={{header|PureBasic}}==
The range of integers handled has been set at an obscene 45 digits.
<lang PureBasic>DataSection
numberNames:
Line 869 ⟶ 868:
;tens
Data.s "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety"
;big, non-Chuquet system
Data.s "thousand", "million", "billion", "trillion", "quadrillion", "quintillion", "sextillion"
Data.s "septillion", "octillion", "nonillion", "decillion", "undecillion", "duodecillion"
Data.s "tredecillion"
EndDataSection
 
Procedure.s numberWords(number.sq)
;handles integersthe fromrange -1E459223372036854775808 to +1E459223372036854775807
Static isInitialized = #False
Static Dim small.s(19)
Static Dim tens.s(9)
Static Dim big.s(146)
If Not isInitialized
Line 890 ⟶ 887:
Read.s tens(i)
Next
For i = 1 To 146
Read.s big(i)
Next
Line 896 ⟶ 893:
EndIf
If Len(number) >= 450
For i = 1 To Len(number)
If Not FindString("- 0123456789", Mid(number,i,1), 1)
number = Left(number, i - 1) ;trim number to the last valid character
Break ;exit loop
EndIf
Next
Protected IsNegative = #False
number = Trim(number)
If Left(number,1) = "-"
IsNegative = #True
number = Trim(Mid(number, 2))
EndIf
If CountString(number, "0") = Len(number)
ProcedureReturn "zero"
EndIf
Protected num.sq = Abs(number), output.s, unit, unitOutput.s, working
If Len(number) > 45
ProcedureReturn "Number is too big!"
EndIf
Protected num.s = number, output.s, unit, unitOutput.s, working
Repeat
working = Val(Right(num, 2))% 100
unitOutput = ""
Select working
Line 934 ⟶ 913:
EndSelect
working = Val(Right(num, 3)% 1000) / 100
If working
If unitOutput <> ""
Line 952 ⟶ 931:
output = unitOutput + output
Ifunit Len(num)+ > 31
num = Left(num, Len(num) -/ 3)1000
Until num = unit + 10
Else
Break ;exit loop
EndIf
ForEver
If IsNegativenumber < 0
output = "negative " + output
EndIf
Line 967 ⟶ 942:
EndProcedure
 
Define n$
If OpenConsole()
PrintN(Str(1234567890) + " = " + numberWords(1234567890) + #CRLF$)
Repeat
PrintN(Str(-987654321) + " = " + numberWords(-987654321) + #CRLF$)
Repeat
PrintN(Str(900000000001) + " = " + numberWords(900000000001) + #CRLF$)
Print("Give me an integer (or q to quit)! ")
PrintN(Str(9223372036854775807) + " = " + numberWords(9223372036854775807) + #CRLF$)
n$ = Input()
PrintN(Str(0) + " = " + numberWords(n$0))
Until n$ <> ""
Print(#CRLF$ + #CRLF$ + "Press ENTER to exit")
If Left(Trim(n$),1) = "q"
n$ = Input()
Break ;exit loop
EndIf
PrintN(numberWords(n$))
ForEver
CloseConsole()
EndIf</lang>
Sample output (reformatted here for an 80 column display):
</lang>
<pre>1234567890 = one billion, two hundred thirty-four million,
Sample output:
five hundred sixty-seven thousand, eight hundred ninety
<pre>Give me an integer (or q to quit)! 3
 
three
-987654321 = negative nine hundred eighty-seven million,
Give me an integer (or q to quit)! -1327
negative six onehundred fifty-four thousand, three hundred twenty-sevenone
 
Give me an integer (or q to quit)! 0
900000000001 = nine hundred billion, one
zero
 
Give me an integer (or q to quit)! 100000000002000000000000000300000000000000004
one9223372036854775807 hundred= nine tredecillionquintillion, two decillion,hundred twenty-three hundred quadrillion, four</pre>
three hundred seventy-two trillion, thirty-six billion,
eight hundred fifty-four million, seven hundred seventy-five thousand,
eight hundred seven
 
0 = zero</pre>
 
== {{header|Python}} ==
Anonymous user