project euler 8
来源:互联网 发布:mac截图后文件在哪里 编辑:程序博客网 时间:2024/06/10 20:56
Problem 8
Largest product in a series
The four adjacent digits in the 1000-digit number that have the greatest product are 9 × 9 × 8 × 9 = 5832.
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
Find the thirteen adjacent digits in the 1000-digit number that have the greatest product. What is the value of this product?
连续数字最大乘积
在下面这个1000位正整数中,连续4个数字的最大乘积是 9 × 9 × 8 × 9 = 5832。
73167176531330624919225119674426574742355349194934
96983520312774506326239578318016984801869478851843
85861560789112949495459501737958331952853208805511
12540698747158523863050715693290963295227443043557
66896648950445244523161731856403098711121722383113
62229893423380308135336276614282806444486645238749
30358907296290491560440772390713810515859307960866
70172427121883998797908792274921901699720888093776
65727333001053367881220235421809751254540594752243
52584907711670556013604839586446706324415722155397
53697817977846174064955149290862569321978468622482
83972241375657056057490261407972968652414535100474
82166370484403199890008895243450658541227588666881
16427171479924442928230863465674813919123162824586
17866458359124566529476545682848912883142607690042
24219022671055626321111109370544217506941658960408
07198403850962455444362981230987879927244284909188
84580156166097919133875499200524063689912560717606
05886116467109405077541002256983155200055935729725
71636269561882670428252483600823257530420752963450
找出这个1000位正整数中乘积最大的连续13个数字。它们的乘积是多少?
package projecteuler;import java.util.ArrayList;import java.util.List;import org.junit.Test;public class Prj8 {/** * The four adjacent digits in the 1000-digit number that have the greatest * product are 9 × 9 × 8 × 9 = 5832. * * 73167176531330624919225119674426574742355349194934 * 96983520312774506326239578318016984801869478851843 * 85861560789112949495459501737958331952853208805511 * 12540698747158523863050715693290963295227443043557 * 66896648950445244523161731856403098711121722383113 * 62229893423380308135336276614282806444486645238749 * 30358907296290491560440772390713810515859307960866 * 70172427121883998797908792274921901699720888093776 * 65727333001053367881220235421809751254540594752243 * 52584907711670556013604839586446706324415722155397 * 53697817977846174064955149290862569321978468622482 * 83972241375657056057490261407972968652414535100474 * 82166370484403199890008895243450658541227588666881 * 16427171479924442928230863465674813919123162824586 * 17866458359124566529476545682848912883142607690042 * 24219022671055626321111109370544217506941658960408 * 07198403850962455444362981230987879927244284909188 * 84580156166097919133875499200524063689912560717606 * 05886116467109405077541002256983155200055935729725 * 71636269561882670428252483600823257530420752963450 Find the thirteen * adjacent digits in the 1000-digit number that have the greatest product. * What is the value of this product? */@Testpublic void test() {Region rg = new Region(0, 0).getLargest(VAL_STR);System.out.println(" start = " + rg.start + ",end =" + rg.end+ " ,val =" + rg.maxValue);}public static final String VAL_STR = "73167176531330624919225119674426574742355349194934"+ "96983520312774506326239578318016984801869478851843"+ "85861560789112949495459501737958331952853208805511"+ "12540698747158523863050715693290963295227443043557"+ "66896648950445244523161731856403098711121722383113"+ "62229893423380308135336276614282806444486645238749"+ "30358907296290491560440772390713810515859307960866"+ "70172427121883998797908792274921901699720888093776"+ "65727333001053367881220235421809751254540594752243"+ "52584907711670556013604839586446706324415722155397"+ "53697817977846174064955149290862569321978468622482"+ "83972241375657056057490261407972968652414535100474"+ "82166370484403199890008895243450658541227588666881"+ "16427171479924442928230863465674813919123162824586"+ "17866458359124566529476545682848912883142607690042"+ "24219022671055626321111109370544217506941658960408"+ "07198403850962455444362981230987879927244284909188"+ "84580156166097919133875499200524063689912560717606"+ "05886116467109405077541002256983155200055935729725"+ "71636269561882670428252483600823257530420752963450";public static class Region {public Region(int start, int end) {this.start = start;this.end = end;}public int start;public int end;public Long maxValue = (long) 0;private char[] getCharArr(String valStr) {char[] charArr = new char[valStr.length()];valStr.getChars(0, valStr.length(), charArr, 0);return charArr;}List<Region> parserRegion(char[] charArr) {List<Region> ret = new ArrayList<Region>();List<Integer> zeroId = new ArrayList<Integer>();for (int i = 0; i < charArr.length; i++) {if (charArr[i] == '0') {zeroId.add(i);}}for (int i = 0; i < zeroId.size() - 1; i++) {int start = zeroId.get(i);int end = zeroId.get(i + 1);if (i == 0) {if (start != 0) {if (start + 1 > 13) {Region rg = new Region(0, start);ret.add(rg);}} else {if (end - start + 1 > 13) {Region rg = new Region(start, end);ret.add(rg);}}continue;}if (end - start + 1 > 13) {Region rg = new Region(start, end);ret.add(rg);}}return ret;}Region calculateMax(Region rg, char[] charArr) {Region ret = new Region(rg.start, rg.end);Long sum = 1L;for (int i = rg.start; i <= rg.end - 13 + 1; i++) {Long tmp = 1L;for (int j = 0; j < 13; j++) {tmp = tmp* Integer.parseInt(new String(new char[] { charArr[i + j] }));}if (tmp > sum) {sum = tmp;ret.start = i;ret.end = i + 13;ret.maxValue = sum;}}return ret;}public Region getLargest(String valStr) {Region ret = null;char[] charArr = getCharArr(valStr);List<Region> regions = parserRegion(charArr);Long sum = 1L;for (Region rg : regions) {Region calculateRg = calculateMax(rg, charArr);if (calculateRg.maxValue > sum) {sum = calculateRg.maxValue;ret = calculateRg;}}return ret;}}}
0 0
- Project Euler - Problem 8
- Project Euler problem 8
- Project Euler 8
- Project Euler 8
- project Euler problem 8
- Project Euler:Problem 8
- project euler 8
- 【Project Euler】8 第八题
- Project Euler
- project euler
- Project Euler
- Project Euler .net
- Project Euler 0
- Project Euler 1-6
- Project Euler 7-10
- Euler Project Problem 6
- project euler problem 11
- project euler problem14
- Android关于连接需要Portal认证的WIFI
- Linux 文件系统剖析
- 【以太网数据结构】UDP协议
- project euler 7
- 忽悠的生态
- project euler 8
- 关于socket阻塞与非阻塞情况下的recv、send、read、write返回值
- LeetCode 191 Number of 1 Bits
- .bash_profile和.bashrc的区别(如何设置生效)
- APUE学习之----socket编程实现简单的C/S
- E-斐波那契数
- 文本分类(二):scrapy爬取网易新闻
- Python中的os模块
- 树莓派(Raspberry pi)下安装七牛云c/c++ SDK时遇到的问题及解决方案