/* Solution for homework 3
 * Write a program that reads a number between 1 and 999 from user 
 * and spells out it in English.
 *
 * For example: 
 *
 * If number is 453, your program prints out “Four hundred fifty three”
 *
 * If number is 37, your program prints out “Thirty seven”
 *
 * If number is 214, your program prints out “Two hundred fourteen”
 *
*/

#include <stdio.h>
#include <math.h>
int main(void) {
	/* Declaration of variables*/
	int number;
	int a; /* store the value of hundred digit */
	int b; /* store the value of ten digit*/
	int c; /* store the value of the last digit of the number*/

	/* waiting for input value and deal with it by loop */

	while (1) {
		printf("Enter a number between 1-999 (enter 0 to exit): ");
		scanf("%d", &number);

		if (number == 0)
			break;

		if (number > 999 || number < 1)
			continue;

		a = number / 100;             //calculate the hundred digit
		b = (number - a * 100) / 10;  //calculate the ten digit
		c = number - a * 100 - b * 10; //calculate the last digit of the number
      
        /************************************************
         * deal with the hundred digit of the numbers 
         ************************************************/
  	    if (a > 0) {
          switch (a) {
			case 1:// deal with the numbers between 100-199
				printf ("One ");
				break;
			case 2:// deal with the numbers between 200-299
				printf ("Two ");
				break;
			case 3:// deal with the numbers between 300-399
				printf ("Three ");
				break;
			case 4:// deal with the numbers between 400-499
				printf ("Four ");
				break;
			case 5:// deal with the numbers between 500-599
				printf ("Five ");
				break;
			case 6:// deal with the numbers between 600-699
				printf ("Six ");
				break;
			case 7:// deal with the numbers between 700-799
				printf ("Seven ");
				break;
			case 8:// deal with the numbers between 800-899
				printf ("Eight ");
				break;
			case 9:// deal with the numbers between 900-999
				printf ("Nine ");
				break;
			default:
				break;
	      }
		  printf("hundred ");
		}
		
        /************************************************
         * deal with the ten digit of the numbers 
         ************************************************/
        if (b == 1) {//handle 10-19
		  switch (c) {
			case 0: //output 10
                 if (a == 0) 
                    printf("Ten ");
                 else
                    printf("ten ");
				break;
			case 1: //output 11
                 if (a == 0) 
                    printf("Eleven ");
                 else
                    printf("eleven ");
				break;
			case 2: //output 12
                 if (a == 0) 
                    printf("Twelve ");
                 else
                    printf("twelve ");
				break;
			case 3: //ouput 13
                 if (a == 0) 
                    printf("Thirteen ");
                 else
                    printf("thirteen ");
				break;
			case 4: //output 14
                 if (a == 0) 
                    printf("Forteen ");
                 else
                    printf("forteen ");
				break;
			case 5: //output 15
                 if (a == 0) 
                    printf("Fifteen ");
                 else
                    printf("fifteen ");
				break;
			case 6: //output 16
                 if (a == 0) 
                    printf("Sixteen ");
                 else
                    printf("sixteen ");			
				break;
			case 7: //output 17
                 if (a == 0) 
                    printf("Seventeen ");
                 else
                    printf("seventeen ");
				break;
			case 8: //output 18
                 if (a == 0) 
                    printf("Eighteen ");
                 else
                    printf("eighteen ");
				break;
			case 9: //output 19
                 if (a == 0) 
                    printf("Nineteen ");
                 else
                    printf("nineteen ");
   				break;
			default:
				break;
			}
		} else if (b >= 2) {
		  switch (b) { //handle with the ten position with a number with hundreds.
			case 2://output 20
                 if (a == 0) 
                    printf("Twenty ");
                 else
                    printf("twenty ");
 				break;
			case 3://output 30
                 if (a == 0) 
                    printf("Thirty ");
                 else
                    printf("thirty ");			
				break;
			case 4://output 40
                 if (a == 0) 
                    printf("Forty ");
                 else
                    printf("forty ");
				break;
			case 5://output 50
                 if (a == 0) 
                    printf("Fifty ");
                 else
                    printf("fifty ");				
				break;
			case 6://output 60
                 if (a == 0) 
                    printf("Sixty ");
                 else
                    printf("sixty ");
				break;
			case 7://output 70
                 if (a == 0) 
                    printf("Seventy ");
                 else
                    printf("seventy ");
				break;
			case 8://output 80
                 if (a == 0) 
                    printf("Eighty ");
                 else
                    printf("eighty ");
				break;
			case 9://output 90
                 if (a == 0) 
                    printf("Ninety ");
                 else
                    printf("ninety ");
				break;
			default:
				break;
			}
        }
        
        /************************************************
         * deal with the last digit of the numbers
         ************************************************/
		if (b!= 1) {
          switch (c) {
			case 1://output 1
                 if (a == 0 && b == 0) 
                    printf("One ");
                 else
                    printf("one ");    
				break;
			case 2://output 2
                 if (a == 0 && b == 0) 
                    printf("Two ");
                 else
                    printf("two "); 		
				break;
			case 3://output 3
                 if (a == 0 && b == 0) 
                    printf("Three ");
                 else
                    printf("three "); 
				break;
			case 4://output 4
                 if (a == 0 && b == 0) 
                    printf("Four ");
                 else
                    printf("four "); 
				break;
			case 5://output 5
                 if (a == 0 && b == 0) 
                    printf("Five ");
                 else
                    printf("five "); 
				break;
			case 6://output 6
                 if (a == 0 && b == 0) 
                    printf("Six ");
                 else
                    printf("six "); 
				break;
			case 7://output 7
                 if (a == 0 && b == 0) 
                    printf("Seven ");
                 else
                    printf("seven "); 
				break;
			case 8://output 8
                 if (a == 0 && b == 0) 
                    printf("Eight ");
                 else
                    printf("eight "); 
				break;
			case 9://output 9
                 if (a == 0 && b == 0) 
                    printf("Nine ");
                 else
                    printf("nine "); 
				break;
			default:
				break;
			}
		}
        printf("\n");
	}

	system("Pause");
	return 0;
}

