codepad
[
create a new paste
]
login
|
about
Language:
C
C++
D
Haskell
Lua
OCaml
PHP
Perl
Plain Text
Python
Ruby
Scheme
Tcl
#include "stdafx.h" #include <iostream> #include <string> #include <cctype> #include <algorithm> using namespace std; bool testcharacter(string input); bool checkZero(string input); bool checkSpace(string input); int main() { string numStr;// for user entered number // names for use in output string onesName[] = { "one", "two", "three", "four", "five", "six", "seven", "eight", "nine" }; string teensName[] = { "ten", "eleven", "twelve", "thirteen", "fourteen", "fifteen", "sixteen", "seventeen", "eighteen", "nineteen" }; string tensName[] = { "twenty", "thirty", "forty", "fifty", "sixty", "seventy", "eighty", "ninety" }; string illion_preName[] = { "m", "b", "tr", "quadr", "quint", "sext"}; char repeat = 'y'; bool t; // check minus number bool cp =true; do// as long as user wishes to enter number for naming { // input number do { cout << "Number = "; fflush(stdin); getline(cin,numStr); }while(!testcharacter(numStr) || !checkSpace(numStr)); // long long int = 2^63 ~ e20 if( numStr.size() > 24 ) { cout << "The number's too big! Please try again." << endl; continue; } // minus number if (numStr[0] =='-') { t = false; numStr = numStr.erase(0,1); } // delete prefix - zero while(numStr[0] == '0' && numStr.size()>1) { numStr = numStr.erase(0,1); } // if input is zero. if (checkZero(numStr) == true && numStr[0] !='-') { cout<<"zero "; t = true; } // oop it's minus number, right? if (t==false) { cout<<"minus "; t = true; } // pad the string with leading '0' until size = multiple of 3 while( numStr.size()%3 != 0 ) numStr = '0' + numStr; // for each group of 3 digits from most to least significant for( unsigned int i = 0; i < numStr.size(); i += 3 ) { cp = true; // flag to set if number is 10000000000.... if((numStr[i+0]=='0') && (numStr[i+1]=='0') && (numStr[i+2] == '0')) { cp = false; } else { // treat the hundreds place if( numStr[i + 0] > '0' ) { cout << onesName[ numStr[i + 0] - '0' - 1 ] << " hundred "; } // treat tens and ones digits for non-teens case if( numStr[i + 1] == '0' || numStr[i + 1] > '1' ) { if( numStr[i + 1] > '1' ) { cout << tensName[ numStr[i + 1] - '0' - 2 ] << " "; } if( numStr[i + 2] > '0' ) { cout << onesName[ numStr[i + 2] - '0' - 1 ] << " "; } } // treat teens case if(numStr[i+1] =='1') { cout << teensName[ numStr[i + 2] - '0' ] << " "; } } // take 3 digits each time. unsigned int j = ( numStr.size() - i )/3; // treat thousand. if( j == 2 && cp==true) { cout << "thousand, "; } // treat more ..illion else if( j > 2 && cp == true) { cout << illion_preName[ j - 3 ]; //prefix cout << "illion, "; // suffix } } cout << endl << "Repeat? (y/n): "; cin >> repeat; }while( repeat == 'y' ); cout << endl; return 0; } // check any whitespace in String. bool checkSpace(string input) { bool ret = true; for(unsigned int i=0;i<input.size();i++) { if(input[i]==' ') { ret = false;break; } } return ret; } // check if wrong input format. bool testcharacter(string input) { bool ret = true; for(unsigned int i=0;i<input.size();i++) { if(!isdigit(input[i]) && input[0]!='-') { ret = false; break; } } return ret; } // check if input zero bool checkZero(string input) { bool ret = true; for(unsigned int i=0;i<input.size();i++) { if(input[i] != '0') { ret = false; break; } else ret = true; } return ret; }
Private
[
?
]
Run code
Submit