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

1 Answer

0 votes
#include <iostream>
#include <string>
 
using std::string;
 
string below20[] = {"", "one", "two", "three", "four", "five", "six", "seven",
                    "eight", "nine", "ten", "eleven", "twelve", "thirteen",
                    "fourteen", "fifteen", "sixteen", "seventeen", "eighteen",
                    "nineteen"};
 
string tens[] = {"", "", "twenty", "thirty", "forty", "fifty",
                 "sixty", "seventy", "eighty", "ninety"};
 
string setBelow20AndTens(int num) {
    if (num == 0) return "";
    else if (num < 20) return below20[num] + " ";
    else if (num < 100) return tens[num / 10] + " " + setBelow20AndTens(num % 10);
    else return below20[num / 100] + " hundred " + setBelow20AndTens(num % 100);
}
 
string numberToWords(int num) {
    if (num == 0) return "zero";
 
    string result;
 
    if (num >= 1000000000) {
        result += setBelow20AndTens(num / 1000000000) + "billion ";
        num %= 1000000000;
    }
    if (num >= 1000000) {
        result += setBelow20AndTens(num / 1000000) + "million ";
        num %= 1000000;
    }
    if (num >= 1000) {
        result += setBelow20AndTens(num / 1000) + "thousand ";
        num %= 1000;
    }
    if (num > 0) {
        result += setBelow20AndTens(num);
    }
 
    // Trim trailing space
    while (!result.empty() && result.back() == ' ')
        result.pop_back();
 
    return result;
}
 
int main() {
    int n = 176283;
 
    std::cout << numberToWords(n) << std::endl;
}
 
 
/*
run:
 
one hundred seventy six thousand two hundred eighty three
 
*/

 



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