Skip to content

Instantly share code, notes, and snippets.

@asela38
Last active May 15, 2018 10:16
Show Gist options
  • Save asela38/f4e6cfeafbeaf21d406a7578b1b2fc96 to your computer and use it in GitHub Desktop.
Save asela38/f4e6cfeafbeaf21d406a7578b1b2fc96 to your computer and use it in GitHub Desktop.
/*
* NumberReader.c
*
* Created on: May 5, 2009
* Author: Asela
*
* shows the way to read integers for integer values
* ( form INT_MIN+1 to INT_MAX )
*/
#include <stdio.h>
#include <stdlib.h>
#include <limits.h>
#define MILLION 1000000
#define BILLION 1000000000
void readNumberOneTo_9(int number);
void readNumberOneTo_99(int number);
void readNumberOneTo_999(int number);
void readNumberOneTo_999999(int number);
void readNumberOneTo_999999999(int number);
void readNumberOneTo_999999999999(int number);
void readSecondPlace(int number);
void readNumberEleveToNineTeen(int number);
void readNumberTenToNinTeen(int number);
int main(int argc , char *argv[] ){
int number;
printf("Enter the number you want to read : \n");
scanf ("%d", &amp;number);
printf("The way to read %d is : ", number );
//if number is negative put the word negative the the
//display and make it positive and read it as a positive
//value
if( number &lt; 0){
printf("Negative ");
number *= -1;
}
if (number == 0 ) {
printf("Zero");
}else if (number &lt; 1000 ) {
readNumberOneTo_999(number);
}else if (number &lt; MILLION ){
readNumberOneTo_999999(number);
}else if (number &lt; BILLION ){
readNumberOneTo_999999999(number);
}else if (number &lt;= INT_MAX ){
readNumberOneTo_999999999999(number);
}
return 0;
}
//prints the value of a single number 1 to 9
void readNumberOneTo_9(int number){
if(number == 1){
printf("One");
} else if(number == 2){
printf("Two");
}else if(number == 3){
printf("Three");
}else if(number == 4){
printf("Four");
}else if(number == 5){
printf("Five");
}else if(number == 6){
printf("Six");
}else if(number == 7){
printf("Seven");
}else if(number == 8){
printf("Eight");
}else if(number == 9){
printf("Nine");
}
}
/*
* prints values of ten to 19
* this a special case 'case these
* numbers have different way of reading
*/
void readNumberEleveToNineTeen(int number){
if(number == 10){
printf("Ten ");
}else if(number == 11){
printf("Eleven ");
}else if(number == 12){
printf("Twelve ");
}else {
if(number == 13){
printf("Thir");
}else if(number == 15){
printf("Fif");
}else {
readNumberOneTo_9( number % 10 );
}
printf("teen");
}
}
//reads numbers between one and 99
void readNumberOneTo_99(int number){
if (number &lt; 10){
readNumberOneTo_9(number);
} else if (number &lt; 20) {
readNumberEleveToNineTeen(number);
}else {
readSecondPlace( number / 10 );
if( number % 10 != 0 ){
readNumberOneTo_9( number % 10 );
}
}
}
//reads digit in the second position
// that are multiples of 10
void readSecondPlace(int number ){
if(number == 2){
printf("Twen");
}else if(number == 3){
printf("Thir");
}else if(number == 5){
printf("Fif");
}else if(number == 8){
printf("Eigh");
}else {
readNumberOneTo_9(number);
}
printf("ty ");
}
//reads numbers between one and 099
void readNumberOneTo_999(int number){
if (number &lt; 10){
readNumberOneTo_9(number);
} else if (number &lt; 100) {
readNumberOneTo_99(number);
}else {
readNumberOneTo_9( number/100 );
printf(" Hundred");
if( number % 100 != 0){
printf(" and ");
readNumberOneTo_99(number % 100);
}
}
}
//for numbers greater that 1000
//They have a systematic way of reading
//Numbers read as blocs of three digits
void readNumberOneTo_999999(int number){
readNumberOneTo_999(number / 1000 );
printf(" Thousand ");
readNumberOneTo_999(number % 1000 );
}
void readNumberOneTo_999999999(int number){
readNumberOneTo_999(number / MILLION );
printf(" Million ");
readNumberOneTo_999999(number % MILLION );
}
void readNumberOneTo_999999999999(int number){
readNumberOneTo_999(number / BILLION );
printf(" Billion ");
readNumberOneTo_999999999(number % BILLION );
}
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment