#include <iostream> #include <string.h> #include <string> using namespace std; /* The program converts a number to its word equivalent. For example, 1 One ,2 -> two ,3 -> three ............. */ unsigned long long int Denominations[] = {1000000000000000000,1000000000000000, 1000000000000,1000000000,1000000 ,1000,100,1 }; const int No_Of_Denums = sizeof(Denominations)/sizeof(long long int); char Ones[][20] = {"zero","one ","two ","three ","four ","five ","six ", "seven ","eight ","nine " }; char Tens[][20] = {"twenty ","thirty ","forty ","fifty ","sixty ", "seventy ","eighty ","ninety " }; char Scale[][20] = {"hexillion ","quintillion ","quadrillion ","trillion ","billion ","million ", "thousand ","hundred ","" }; char Teens[][20] = {"ten ","eleven ","twelve ","thirteen ", "fourteen ","fifteen ","sixteen ","seventeen ","eighteen " ,"nineteen " }; string UnderHundred(int n) { // n is known to be under 1000. Hence first split up it into 3 numbers int n1,n2,n3; n1=n%10; n/=10; n2=n%10; n/=10; n3=n%10; string s=""; if (n3!=0) { s+=Ones[n3]; s+="hundred "; } if (n2!=0) { if (n2==1) //Different construction for Teens, ten inclusive { s+=Teens[n1]; return s; } s+=Tens[n2-2]; s.replace(s.length()-1,1,"-"); } s+=Ones[n1]; return s; } string Words(unsigned long long int n) { int DenumCount[No_Of_Denums] = {0}; int DenumPointer=0; while (true) { if (n < Denominations[DenumPointer]) { DenumPointer++; if (DenumPointer>=No_Of_Denums) { break; } continue; } DenumCount[DenumPointer]++; n-=Denominations[DenumPointer]; } string s=""; //Now create a string on the basis of those values for (int i=0; i<No_Of_Denums; i++) { if (DenumCount[i]==0) continue; s+=UnderHundred(DenumCount[i]); s+=Scale[i]; } //Convert to first letter to ucase s[0] = toupper(s[0]); return s; } int main() { unsigned long long int i; unsigned long long int Limit = 0xFFFFFFFFFFFFFFFF; cout << "Print the number you wish to convert. (0) to exit\n"; cout << Limit <<" is the limit.\n\n"; while(true) { cout << "Enter a number to find the word spell\n" << endl; cin >> i; if (!i) break; string s = Words(i); cout << Words(i) << endl; } return 0; } /* OUTPUT: Print the number you wish to convert. (0) to exit 18446744073709551615 is the limit. Enter a number to find the word spell 64 Sixty-four hundred Enter a number to find the word spell */