Pages

Tuesday, September 8, 2009

Euler Problem 17 solution

Time (s): ~0.002
package margusmartseppcode.From_10_to_19;

public class Problem_17 {
 static int hundred = "hundred".length();
 static int hundredand = "hundredand".length();
 static int onethousand = "onethousand".length();
 static int lens[] = new int[100];
 static {
  String tmp[] = ("| one two three four five six seven eight nine "
    + "| eleven twelve thirteen fourteen fifteen sixteen "
    + "seventeen eighteen nineteen | ten twenty thirty forty "
    + "fifty sixty seventy eighty ninety").split(" ");
  for (int i = 1; i < 10; i++) {
   lens[i] = tmp[i].length();
   lens[i + 10] = tmp[i + 10].length();
   lens[i * 10] = tmp[i + 20].length();
  }
  for (int i = 2; i < 10; i++)
   for (int j = 1; j < 10; j++)
    lens[i * 10 + j] = lens[i * 10] + lens[j];
 }

 public static void main(String[] args) {
  int sum = 0, hundredsum = 0;

  for (int i = 1; i < lens.length; i++)
   hundredsum += lens[i];

  sum = hundredsum;
  for (int i = 1; i < 10; i++)
   sum += lens[i] + hundred + (lens[i] + hundredand) * 99
     + hundredsum;

  sum += onethousand;
  System.out.println(sum);
 }
}

No comments:

Post a Comment