110 lines
2.8 KiB
Plaintext
110 lines
2.8 KiB
Plaintext
global outnum$
|
|
dim ones$(20),tens$(9),gr$(5),group(5)
|
|
for a = 0 to 19
|
|
read a$:ones$(a)=a$
|
|
next a
|
|
for a = 1 to 8
|
|
read a$:tens$(a)=a$
|
|
next a
|
|
|
|
[start]
|
|
redim gr$(5)
|
|
redim group(5)
|
|
|
|
input "Enter a number (nonzero positive integers only less than 1 quadrillion, no commas): ";num$
|
|
|
|
num$=trim$(num$)
|
|
numVal=int(val(num$))
|
|
if numVal=0 or numVal>999999999999999 then print "Ended" : end
|
|
|
|
numParse = numVal
|
|
numLen = len(str$(numParse))
|
|
|
|
if numLen<=15 then groupCount=5
|
|
if numLen<=12 then groupCount=4
|
|
if numLen<=9 then groupCount=3
|
|
if numLen<=6 then groupCount=2
|
|
if numLen<=3 then groupCount=1
|
|
|
|
if numLen>12 and numLen<=15 then
|
|
group(5)=int(numParse/1000000000000)
|
|
call convert group(5)," trillion"
|
|
gr$(5)=outnum$
|
|
numParse=nP(numParse,12)
|
|
numLen=len(str$(numParse))
|
|
end if
|
|
|
|
if numLen>9 and numLen<=12 then
|
|
group(4)=int(numParse/1000000000)
|
|
call convert group(4)," billion"
|
|
gr$(4)=outnum$
|
|
numParse=nP(numParse,9)
|
|
numLen=len(str$(numParse))
|
|
end if
|
|
|
|
if numLen>6 and numLen<=9 then
|
|
group(3)=int(numParse/1000000)
|
|
call convert group(3)," million"
|
|
gr$(3)=outnum$
|
|
numParse=nP(numParse,6)
|
|
numLen=len(str$(numParse))
|
|
end if
|
|
|
|
if numLen>3 and numLen<=6 then
|
|
group(2)=int(numParse/1000)
|
|
call convert group(2)," thousand"
|
|
gr$(2)=outnum$
|
|
numParse=nP(numParse,3)
|
|
numLen=len(str$(numParse))
|
|
end if
|
|
|
|
if numLen<=3 then
|
|
group(1)=numParse
|
|
call convert group(1),""
|
|
gr$(1)=outnum$
|
|
numLen=len(str$(numParse))
|
|
end if
|
|
|
|
print
|
|
for a=groupCount to 1 step -1
|
|
print gr$(a);" ";
|
|
next a
|
|
print
|
|
print
|
|
|
|
goto [start]
|
|
|
|
sub convert num, dem$
|
|
outnum$=""
|
|
for a=len(str$(num)) to 1 step -1
|
|
b$=mid$(str$(num),a,1)
|
|
c=val(b$)
|
|
d=len(str$(num))-a+1
|
|
select case
|
|
case d=1
|
|
outnum$=ones$(c)
|
|
case d=2
|
|
if c<2 then
|
|
outnum$=ones$(val(right$(str$(num),2)))
|
|
else
|
|
if c>=2 and val(right$(str$(num),1))<>0 then
|
|
outnum$=tens$(c-1)+"-"+outnum$
|
|
else
|
|
outnum$=tens$(c-1)
|
|
end if
|
|
end if
|
|
case d=3
|
|
if c<>0 then outnum$=ones$(c)+" hundred "+outnum$
|
|
end select
|
|
next a
|
|
outnum$=outnum$+dem$
|
|
end sub
|
|
|
|
function nP(num,L)
|
|
nP=val(right$(str$(num),L))
|
|
end function
|
|
|
|
data "","one","two","three","four","five","six","seven","eight","nine"
|
|
data "ten","eleven","twelve","thirteen","fourteen","fifteen","sixteen","seventeen","eighteen","nineteen"
|
|
data "twenty","thirty","forty","fifty","sixty","seventy","eighty","ninety"
|