Tuesday, January 15, 2013

UVa 619 - Numerically Speaking

Accepted date: 2012-12-19
Ranking (as of 2013-01-15): 1004
Language: JAVA

/*
  UVa 619 - Numerically Speaking
*/

import java.util.Scanner;
import java.math.BigInteger;

class Main {
  static final BigInteger TWENTY_SIX = BigInteger.valueOf(26);

  public static void main(String[] args) {
    Scanner sc = new Scanner(System.in);
    while (true) {
      if (sc.hasNextBigInteger()) {
        BigInteger n = sc.nextBigInteger();
        String s = convertToString(n);
        System.out.printf("%-22s%s%n", s, getNumberToBePrinted(n));
      }
      else if (sc.hasNext()) {
        String s = sc.next();
        if (s.equals("*"))
          break;
        BigInteger n = convertToNumber(s);
        System.out.printf("%-22s%s%n", s, getNumberToBePrinted(n));
      }
    }
  }

  static String convertToString(BigInteger n) {
    StringBuilder sb = new StringBuilder();
    do {
      sb.append((char)('a' +
        n.subtract(BigInteger.ONE).mod(TWENTY_SIX).intValue()));
      n = n.subtract(BigInteger.ONE).divide(TWENTY_SIX);
    } while (n.compareTo(BigInteger.ZERO) != 0);
    sb.reverse();
    return sb.toString();
  }

  static BigInteger convertToNumber(String s) {
    BigInteger n = BigInteger.ZERO;
    for (int i = 0; i < s.length(); i++) {
      n = n.multiply(TWENTY_SIX);
      n = n.add(BigInteger.valueOf((int)(s.charAt(i) - 'a' + 1)));
    }
    return n;
  }

  static String getNumberToBePrinted(BigInteger n) {
    String s = n.toString();
    StringBuilder sb = new StringBuilder();
    for (int i = s.length() - 1, j = 0; i >= 0; i--, j++) {
      sb.append(s.charAt(i));
      if (i > 0 && (j % 3) == 2)
        sb.append(',');
    }
    sb.reverse();
    return sb.toString();
  }
}

No comments:

Post a Comment