project euler 99

来源:互联网 发布:kontakt mac 音源入库 编辑:程序博客网 时间:2024/05/21 17:00

Problem 99


Largest exponential

Comparing two numbers written in index form like 211 and 37 is not difficult, as any calculator would confirm that 211 = 2048 < 37 = 2187.

However, confirming that 632382518061 > 519432525806 would be much more difficult, as both numbers contain over three million digits.

Using base_exp.txt(right click and ‘Save Link/Target As…’), a 22K text file containing one thousand lines with a base/exponent pair on each line, determine which line number has the greatest numerical value.

NOTE: The first two lines in the file represent the numbers in the example given above.


最大的幂

比较两个如211和37这样写成幂的形式的数并不困难,任何计算器都能验证211 = 2048 < 37 = 2187。

然而,想要验证632382518061 > 519432525806就会变得非常困难,因为这两个数都包含有超过三百万位数字。

22K的文本文件base_exp.txt(右击并选择“目标另存为……”)有一千行,每一行有一对底数和指数,找出哪一行给出的幂的值最大。

注意:文件的前两行就是上述两个例子。

package projecteuler;import java.io.BufferedReader;import java.io.FileInputStream;import java.io.InputStreamReader;import java.util.ArrayList;import java.util.Collections;import java.util.List;import junit.framework.TestCase;public class Prj99 extends TestCase {public static final String PATH = "E:\\whua\\mathWorkspace\\test_jgraph\\src\\projecteuler\\Prj99.txt";public void testLargestExponential() {List<LargestExponential> dataList = readDatas();Collections.sort(dataList);System.out.println(dataList.get(dataList.size() - 1).id);}public static class LargestExponential implementsComparable<LargestExponential> {public int base;public int exp;public int id;public double val = 0;public LargestExponential(int base, int exp, int id) {super();this.base = base;this.exp = exp;this.id = id;}public LargestExponential calculateLog() {this.val = 1.0 * exp * Math.log10(base);return this;}@Overridepublic int compareTo(LargestExponential o) {if (val < o.val) {return -1;} else if (val == o.val) {return 0;} else {return 1;}}}List<LargestExponential> readDatas() {List<LargestExponential> ret = new ArrayList<LargestExponential>();try {BufferedReader reader = new BufferedReader(new InputStreamReader(new FileInputStream(PATH), "utf8"));String str = "";int id = 1;while ((str = reader.readLine()) != null) {String[] strs = str.split(",");LargestExponential ex = new LargestExponential(Integer.parseInt(strs[0]), Integer.parseInt(strs[1]),id++).calculateLog();ret.add(ex);}reader.close();} catch (Exception ex) {ex.printStackTrace();}return ret;}}


0 0
原创粉丝点击