Borland C ++ Builder FAQ
The content The last update: 12/12/2008

How to implement the total in words?

The author: OlegGG
The initial link: - - -

Once for a long time wrote:
//-------------------------------------------------------------------------------------- 
//summa.h 
AnsiString triada (AnsiString in, int tn) 
{ 
if (in == "  ") return ""; 
if (in == "000") return ""; 
AnsiString out = ""; 
AnsiString sotni [9] =  
{"Hundred", "two hundred", "three hundred", "four hundred", "five hundred", 
"Six hundred", "seven hundred", "eight hundred", "nine hundred"}; 
AnsiString dubl [10] =  
{"Ten", "eleven", "twelve", "thirteen", "fourteen", 
"Fifteen", "sixteen", "seventeen", "eighteen", "nineteen"}; 
AnsiString des [8] =  
{"Twenty", "thirty", "forty", "fifty", 
"Sixty", "семьдясят", "восемьдясят", "ninety"}; 
AnsiString ed [9] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 
AnsiString edj [9] = {"one", "two", "three", "four", "five", "six", "seven", "eight", "nine"}; 
AnsiString ind [5] = {"", "thousand", "million", "billion", "trillion"}; 
AnsiString post; 
if (in [1]! = ' ') if (in [1]! = ' 0 ') 
        {out = out + sotni [StrToInt (in [1])-1];} 
if (in [2] == ' 1 ') 
        {out = out + "" + dubl [StrToInt (in [3])];} 
if (in [2]! = ' 1 ') if (in [2]! = ' ') if (in [2]! = ' 0 ') 
        {out = out + "" + des [StrToInt (in [2])-2];} 
if (in [3]! = ' 0 ') if (in [2]! = ' 1 ') 
        { 
        if (tn == 1) 
                out = out + "" + edj [StrToInt (in [3])-1]; 
        if (tn! = 1) 
                out = out + "" + ed [StrToInt (in [3])-1]; 
        }
if (tn> 0) if (in [2]! = ' 1 ') 
        { 
        if (tn == 1) switch (in [3]) 
                { 
                case ' 1 ': post = ind [tn] + "and"; break; 
                case ' 2 ': post = ind [tn] + "and"; break; 
                case ' 3 ': post = ind [tn] + "and"; break; 
                case ' 4 ': post = ind [tn] + "and"; break; 
                default: post = ind [tn] + ""; break; 
                }
        if ((tn == 2) || (tn == 3) || (tn == 4)) switch (in [3]) 
                { 
                case ' 1 ': post = ind [tn] + ""; break; 
                case ' 2 ': post = ind [tn] + "and"; break; 
                case ' 3 ': post = ind [tn] + "and"; break; 
                case ' 4 ': post = ind [tn] + "and"; break; 
                default: post = ind [tn] + "ов"; break; 
                }
        }
else 
        { 
        switch (tn) 
                { 
                case 1 : post = ind [tn]; break; 
                default: post = ind [tn] + "ов"; break; 
                }
        }
out = out + post; 
return out; 
}
AnsiString summa (AnsiString in) 
{ 
AnsiString out; 
AnsiString trs [5]; 
AnsiString tro [5]; 
AnsiString buf; 
int n, s; 
div_t dr; 

while (in. Length () <15) 
        { 
        in = "" + in; 
        }
for (n=0; n <5; n ++) trs [n] = in; 
trs [0] = trs [0].Delete (1, in. Length ()-3); 
trs [1] = trs [1].Delete (1, in. Length ()-6).Delete (4,4); 
trs [2] = trs [2].Delete (1, in. Length ()-9).Delete (4,6); 
trs [3] = trs [3].Delete (1, in. Length ()-12).Delete (4,9); 
trs [4] = trs [4].Delete (1, in. Length ()-15).Delete (4,12); 

for (n=0; n <5; n ++) 
        { 
        tro [n] = triada (trs [n], n); 
        }
out = "" +tro [4] + "" +tro [3] + "" +tro [2] + "" +tro [1] + "" +tro [0] + ""; 
out = out. Trim (); 
return out; 
}
//-------------------------------------------------------------------------------------- 
///summa.h 
Works so:
AnsiString s = summa ("123");