How to convert an integer into its written‑out English words in Pascal

1 Answer

0 votes
program NumberToWords;

{$mode objfpc}{$H+}

uses
  SysUtils;

const
  below20: array[0..19] of string = (
    '', 'one', 'two', 'three', 'four', 'five', 'six', 'seven',
    'eight', 'nine', 'ten', 'eleven', 'twelve', 'thirteen',
    'fourteen', 'fifteen', 'sixteen', 'seventeen', 'eighteen',
    'nineteen'
  );

  tens: array[0..9] of string = (
    '', '', 'twenty', 'thirty', 'forty', 'fifty',
    'sixty', 'seventy', 'eighty', 'ninety'
  );

function SetBelow20AndTens(num: Integer): string;
begin
  if num = 0 then
    Exit('');

  if num < 20 then
    Exit(below20[num] + ' ')
  else if num < 100 then
    Exit(tens[num div 10] + ' ' + SetBelow20AndTens(num mod 10))
  else
    Exit(below20[num div 100] + ' hundred ' + SetBelow20AndTens(num mod 100));
end;

function NumberToWords(num: Integer): string;
var
  resultStr: string;
begin
  if num = 0 then
    Exit('zero');

  resultStr := '';

  if num >= 1000000000 then
  begin
    resultStr += SetBelow20AndTens(num div 1000000000) + 'billion ';
    num := num mod 1000000000;
  end;

  if num >= 1000000 then
  begin
    resultStr += SetBelow20AndTens(num div 1000000) + 'million ';
    num := num mod 1000000;
  end;

  if num >= 1000 then
  begin
    resultStr += SetBelow20AndTens(num div 1000) + 'thousand ';
    num := num mod 1000;
  end;

  if num > 0 then
    resultStr += SetBelow20AndTens(num);

  // Trim trailing space
  resultStr := Trim(resultStr);

  Result := resultStr;
end;

var
  n: Integer;
begin
  n := 176283;

  WriteLn(NumberToWords(n));
end.



(*
run:

one hundred seventy six thousand two hundred eighty three

*)

 



answered May 5 by avibootz
edited May 5 by avibootz
...