/**
 * Klase, kas nodrošina skaitliskas vērtības pārveidošanu
 * vārdiskā reprezentācijā.
 *
 * @author Mārtiņš Kalvāns
 * @version 1.0, 09/26/06
 */


public class Long2Text {
	/**
	 * Klases konstruktors. Privāts, lai nevarētu veidot instances.
	 */
	private Long2Text() {}

// {{{ main(String[])
	public static void main(String args[]) {
		for (int i=0; i<args.length; i++) {
			try {
				long v = Long.parseLong(args[i]);
				System.out.print(args[i]);
				System.out.print(": ");
				System.out.println(long2text(v));
			} catch (NumberFormatException e) {
				System.out.println("Nav skaitlis: " + args[i]);
			}
		}
		System.exit(0);
	}

// }}}
// {{{ long2textAppendSmall(StringBuffer, int)
	private static void long2textAppendSmall(StringBuffer sb, int value) {
    if (value > 99) {//simti
      int d = value / 100;
      long2textAppendSmall(sb, d);
      if (d == 1) {
        sb.append(" simts");
      } else {
        sb.append(" simti");
      }
      value = value % 100;
      if (value > 0)
        sb.append(' ');
    }
    if (value > 19) {
      switch (value / 10) {
        case 2: sb.append("divdesmit"); break;
        case 3: sb.append("trīsdesmit"); break;
        case 4: sb.append("četrdesmit"); break;
        case 5: sb.append("piecdesmit"); break;
        case 6: sb.append("sešdesmit"); break;
        case 7: sb.append("septiņdesmit"); break;
        case 8: sb.append("astoņdesmit"); break;
        case 9: sb.append("deviņdesmit"); break;
      }
      value = value % 10;
      if (value > 0) {
        sb.append(' ');
      }
    }
    if (value > 0) {
      switch (value) {
        case 1:  sb.append("viens"); break;
        case 2:  sb.append("divi"); break;
        case 3:  sb.append("trīs"); break;
        case 4:  sb.append("četri"); break;
        case 5:  sb.append("pieci"); break;
        case 6:  sb.append("seši"); break;
        case 7:  sb.append("septiņi"); break;
        case 8:  sb.append("astoņi"); break;
        case 9:  sb.append("deviņi"); break;
        case 10: sb.append("desmit"); break;
        case 11: sb.append("vienpadsmit"); break;
        case 12: sb.append("divpadsmit"); break;
        case 13: sb.append("trīspadsmit"); break;
        case 14: sb.append("četrpadsmit"); break;
        case 15: sb.append("piecpadsmit"); break;
        case 16: sb.append("sešpadsmit"); break;
        case 17: sb.append("septiņpadsmit"); break;
        case 18: sb.append("astoņpadsmit"); break;
        case 19: sb.append("deviņpadsmit"); break;
      }
    }
  }

// }}}
// {{{ long2text(long)
	/**
	 * Funkcija, kas pārveido skaitlisku vērtību vārdiskā reprezentācijā.
	 * 
	 * @param value Vērtība, ko pārveidot vārdiskā formā
	 * @return      Vārdisko vērtības reprezentāciju
	 */
  public static String long2text(long value) {
//  9`223`372`036`854`775`807
		if (value == 0)
			return "nulle";

		StringBuffer sb = new StringBuffer();
		if (value < 0) {
			sb.append("mīnus ");
			value = Math.abs(value);
		}

		int division = (int) (value / 1000000000000000000l);
		long remainder = value % 1000000000000000000l;

		if (division > 0) {// kvintiljoni
			long2textAppendSmall(sb, division);
			if (division % 10 == 1 && division % 100 != 11) {
				sb.append(" kvintiljons");
			} else {
				sb.append(" kvintiljoni");
			}
			if (remainder > 0)
				sb.append(' ');
		}
		division = (int) (remainder / 1000000000000000l);
		remainder = remainder % 1000000000000000l;
		if (division > 0) {// kvadriljoni
			long2textAppendSmall(sb, division);
			if (division % 10 == 1 && division % 100 != 11) {
				sb.append(" kvadriljons");
			} else {
				sb.append(" kvadriljoni");
			}
			if (remainder > 0)
				sb.append(' ');
		}
		division = (int) (remainder / 1000000000000l);
		remainder = remainder % 1000000000000l;
		if (division > 0) {// triljoni
			long2textAppendSmall(sb, division);
			if (division % 10 == 1 && division % 100 != 11) {
				sb.append(" triljons");
			} else {
				sb.append(" triljoni");
			}
			if (remainder > 0)
				sb.append(' ');
		}
		division = (int) (remainder / 1000000000l);
		remainder = remainder % 1000000000l;
		if (division > 0) {// miljardi
			long2textAppendSmall(sb, division);
			if (division % 10 == 1 && division % 100 != 11) {
				sb.append(" miljards");
			} else {
				sb.append(" miljardi");
			}
			if (remainder > 0)
				sb.append(' ');
		}
		division = (int) (remainder / 1000000l);
		remainder = remainder % 1000000l;
		if (division > 0) {// miljoni
			long2textAppendSmall(sb, division);
			if (division % 10 == 1 && division % 100 != 11) {
				sb.append(" miljons");
			} else {
				sb.append(" miljoni");
			}
			if (remainder > 0)
				sb.append(' ');
		}
		division = (int) (remainder / 1000l);
		remainder = remainder % 1000l;
		if (division > 0) {// tūkstoši
			long2textAppendSmall(sb, division);
			if (division % 10 == 1 && division % 100 != 11) {
				sb.append(" tūkstotis");
			} else {
				sb.append(" tūkstoši");
			}
			if (remainder > 0)
				sb.append(' ');
		}
		division = (int) remainder;
		remainder = 0;
		if (division > 0) {// maz
			long2textAppendSmall(sb, division);
		}

		return sb.toString();
	}

// }}}
}
